C1Mon 2.00x (.hpr'1/97), Reference Overview: Author is Tony Cheal, who kindly gave me permission to using and distributing the modified program. Thus, and if you accept that there will be no warranty whatsoever, and do not use it for commercial purposes, the C1Mon is freely available and supported at this site. The code was modified to safely running in the JM system, and with the more recent ones, such as MINERVA, SMSQ and SMSQ/E, and with the 68010+ processors. Which was verified in a standard JM QL, with JS, MGG, MINERVA and SMSQ/E and the GoldCard, with JS and the Super-GoldCard (68020), and in the QXL (68EC040) with SMSQ 2.76 and SMSQ/E 2.85 (and many earlier version since the incredible 2.16). The C1Mon is currently in use in any of these systems. There is (as far as I know) one single peculiarity where the monitor will report an error: When encountering a 32-bit relative branch the concurrently running disassembler will interpret the code sequence as a branch to the next odd address and report an "illegal" error. This until now can only be circumvented by, for instance, setting a breakpoint to immediately after the critical code, and then executing the "go" command, to safely jumping over that sequence without disassembling it. Other 68020+ specific codes will be displayed as "DC.W"-s but executed correctly and with no unexpected halt. Changes: job-header bug fixed, where the job heading data could become corrupted. job-reference cloned commands can refer to always the currently valid registers or, to the registers of the job which was monitored while the clone was initiated. The empty {clone} command toggles that mode. pointer-i.f. protected. pick the C1Mon window will be activated when an eception occurs of trace, illeg, level 7, chk, priv., trap5..15 poke any writes to memory done in the supervisor mode to enabling modifications to certain systems' "protected" memory areae. rom-check ROM integrity check permanently running as a concurrent job. Changes to soft-ROM areae will be notified by some sound signal, delayed up to 8 seconds after they occurred - a scheduled task would respond faster, but slow down the system too much. When fast tracing pairs of changes reports may occur, which is a result of the breakpoints setting procedures which are called for subroutines and traps also, internally. This is otherwise meaningless. trace (and the other exceptions) will automatically adopt themselves to the processor type actually in use (any 680xx). trap-redirection if the monitored job has an own trap redirection table that one will be used in preference to the C1Mon's own one. Start: EX C1M;"{Parameter-String}" The optional {parameterstring} evaluated as keybord input to the monitor. End: no br:j 0:quit The "no br" is a safety precaution to clearing any breakpoint left from a preceding trace sequence from RAM; "j 0" leads to restoring the last monitored jobs own trap redirection, if applicable. Modifier: Flag Useage Default rel display adress rel(bp) on pc rel(pc) on job rel(job) off hex current radix sedecimal on asc include ASCII in dump display on an show current address register values on dn data " " on rn auxilary " " off dis show disassembly when tracing on regs always show updated register values on trap trace through traps off jsr trace through subroutines on break aktivate breakpoints processing on watch activate watchpoints procesing on no {flag} disable specified flags action Those flags can be appended to any command separated with a semicolon and no(!) space, or passed separately after the "flags;" command. They remain valid until re-defined explicitely. Commands: repeat previous command. same, don't execute while tracing. . store .L-value .d0 set D0, etc. border [#chan] [] border width internally set to 1. break [] display breakpoint(s), or set a new bpt to . channels display current jobs channels clone []{:} display all "clone"-jobs, rsp install the following input line as a concurrently running job (default priority set to 3). clone on its own toggles the clone-registers reference between current and job at time of installation. close [#chan] close last used or specified channel cls [#chan] compare [#chan[,]] [[;]flags] dis [#chan[,]] [][,] [[;]flags] dump [#chan[,]] [][,] [[;]flags] eval [[[\]radix]] default radix is 16 (hex) find_[] [#chan[,]] [[;]flags] flags {[no]}* store as new default go [] heap allocate bytes of memory and store its base address at help display list of commands and flags ink [#chan] [] job monitor the specified job - that job becomes "current". jobs [#chan] display all jobs kill load [] nobreak [] clear all or specified breakpoint(s) noheap link back the heap area the base address of which is stored at nowatch_[] clear all or specified watchpoint(s) nowatches clear all watchpoints open #chan mode [] move paper [#chan] [] poke_[] [] defaults to byte size priority [ []] queue [#chan[,]] [[,]] quit regs [#chan[,]] [[;]flags] release [] save device&filename [] save the complete current jobs area, dataspace set to 256 bytes: save flp1_jobfile_exe = 100 strip [#chan] [] swap hide the monitor screen, toggles back. suspend [] trace [#chan[,]] [][,] [[;]flags] watch_[] set watchpoint watches display watchpoints window [#chan] cursor-move last or by command specified window. ALT/cursor to adjust sizes, CTRL/.. for greater increment. windows re-position/-adjust all windows, one after the other Parameter: Notation ..}* may be any number of repetitive entries | alternative [...] optional . a single full stop can be used to resolve ambiguities: poke_w 5 -3 would clear the two bytes at address 2(BP), while poke_w 5 .-3 would store the value of -3 to address 5(BP). Grammar = [$] | & | ^ | % | "" | ' | ~ dyadic operators + - * / add, subtract, multiply, divide ^ module (remainder of a division), MOD ~ bitwise one's complement, NOT ! & bitwise OR, bitwise AND < > shift left/right special % passed to ?
at memory address
@
type conversion address -> value examples: eval @30 eval @25(a6,d0.w) [ ] operational precedence
= {(bp) if < $10000} | £ forced absolute address | | [](
{,
[.w|.l]}*) (
) value as stored in memory (
) etc., as commonly used with assemblers, but may be extended to suit: $c0(a0,d1.w,a6,10(a6)), etc. = d0...d7 | a0...a7 | r0...r7 | bp | tp | pc | sr (supervisor-sp A7' not accessible!) = [,] |
\ | = current jobs RAM/memory area =
address | , start and ende-1 | = current jobs area |
\ command with
in number repetitions = b | w | l | = | | | | = Error Messages, Exceptions display: Illegal Instruction JB= PC=
SR= or Address Trap Error FC=nnn XY @
IR= with FC = 001 acces to user data 010 " program " 101 " supervisor " 110 " programm " 111 interrupt X = I while executing an operation E while executing an exception Y = R while reading W while writing H. P. Recktenwald.