QBREAK creates break points for assembler programs in the Z390 test environment. (BTW, if you're using Z390, then you want to get the SPFlite editor.) I used to be an assembler programmer, and still like it -- maybe wish I could still do it would be more accurate. Lots of us old assembler programmers wrote programs to scan a file looking for character strings, and I'm not an exception. But after a few years, Joe Blank demoed his program (DUMPER, written at Fireman's fund) at the bank and it was better than mine. He contracted with Compuware to do marketing and DUMPER was renamed to to FILEAID. But I still like writing such scan programs.
When I was 14 or so, I was given a HEXED puzzle, that I really liked. At the bank, I wrote a program to find all 2339 solutions. But, later I was asked if I had solutions for 5x12, 4x15, and 3x20 boards in addition to the traditional 6x10. I didn't. And my program could not be adapted for those board sizes. SO, I'm rewriting it. (And still have a partly finished string search program.)
The Z390, assembler and emulator works really well. And it's free. The SPFlite editor also works really well, and it's free. (Although George, the author would like $25 that I've given him a couple times.) Where's all this leading?
The HEXED puzzle program is a challenge, with pointers to pointers, to dsects, etc. And dementia isn't helping a whole lot. But I do think it will work. The Z390 assembler has a TEST option similar to IBM's, that I use all the time.
QBREAK (remember where this started) reads the listing, and creates break points based on labels. There's a new option to Z390 that allows a file of break points to be read, and then control is transferred to the terminal. The QBREAK source program is published, although one more change is needed once I understand what's needed by the Z390 batch option.
The SYSPRINT file is a record of the run.
The LISTING file is the assembler listing (PRN) file.
The SYSIN file contains control cards for the QBREAK program that look like:
LOADLOC=FF000 or a register (9) (R12)
LABEL=Q*,LOAD*,NORM,LOADLOC (Q* = any label that starts with Q)
LABEL=BADSIN+6,PUTSYS-6 (NORM = only that specific string)
LABEL=LOADLOC,WTO,LINE 120 (BADSIN+6 = the instruction 6 bytes after BADSIN)
LABEL=DW 12 (DW 12 lists 12 bytes of data at that label)
(A blank in col-1 is a comment)
LABEL=GOTSYSIN+8
LABEL=PLUSMINU+0C.
Note, you could code LABEL=GET,GET+12, but only the first entry in the list will be used.
In addition, when there's +12 or data length, it must be the only, or last, entry in the list.
(if you mess that up, then junk will be created.) Also, commands are created in the order
that the labels are found in the listing, regardless of the order in which they are specified.
The BREAK file will contain the calculated break (AT) commands:
A FF000.+00012. Q1
A FF000.+00018. Q2
A FF000.+00022. Q3
A FF000.+00022. Q3
A FF000.+0002C. Q4
A FF000.+00116.+6 BADSIN (set break before or after the labeled instruction)
A FF000.+00126.-6 PUTSYS
A FF000.+00126.-6 PUTSYS
A FF000.+0015C.+8 GOTSYSIN
A FF000.+0024E.+0C. PLUSMINU (A = set break point)
L FF000.+00278. 96 LOADLOC (L = list a data field)
A FF000.+00288. QLOADLOC
A FF000.+002A0. LOADLOCR
A FF000.+00414. QLBL
A FF000.+006DE. QLABEL
L FF000.+00AC8. 12 DW
L FF000.+00AD8. 96 WTO
L FF000.+00ADC. 120 LINE