Letters

Editor: To “recap” a letter that was printed in the last (Jan/Feb ’87) issue of TDM, from Vince Stimmel; help was requested on saving auto-run cassette programs to the A&J Microdrive. Mr. Stimmel reported that he received a number of responses and a phone call before his copy of the magazine arrived in the mail. Here are two responses that were sent in to us directly…

Since we too have recently invested in the “poor folks” mass storage from A&J, we have a feeling of kinship. If you have the customized version of MSCRIPT, the “catalog” function can be a help in getting self-starting and machine code programs onto wafer. Load MSCRIPT; at the HOME menu, set “use” to cassette (just hit the “U” key). Then hit “C” for catalog. Play your program tape, and each program should be listed on the screen, along with memory addresses for all code or the auto-start line number in Basic programs. Now that you have some more information, see if you can break into the Basic and save it to wafer. Then save the indicated code at the indicated address and length.

Branson Wilcox
Cawker City, KS

Thank you for publishing my program “Character ANALYSIS” in the JAN/FEB ’87 issue. I hope your readers will enjoy and find some use for the program. I will be happy to answer any of their questions regarding it. I am also enclosing a subroutine for SAVING to A&J and/or tape, to answer the question your reader, Vince Stimmel of Hendersonville, NC, asks. It includes error trapping, verifying, and autostart.

William C. Andrews, M.D.
San Anselmo, CA

9000 ON ERR RESET : BORDER 6: PAPER 6: CLS : PRINT AT 5,12; PAPER 1; INK 9; BRIGHT 1;" SAVE? ";AT 10,7; PAPER 2;" 1 "; PAPER 6; BRIGHT 0;" ON MICROWAFER ";AT 12,13;" OR ";AT 14,7; PAPER 2; BRIGHT 1;" 2 "; PAPER 6; BRIGHT 0;" TAPE CASSETTE ": PAUSE 0
9010 LET Z$=INKEY$: IF Z$="2" THEN GO TO 9040
9020 BORDER 1: PAPER 1: CLS : PRINT AT 10,10; PAPER 2; INK 9; FLASH 1;" RECORDING "
9030 SAVE "@1,TITLE" LINE 9100: GO TO 9100
9040 ON ERR GO TO 9090: BORDER 0: PAPER 0: CLS : PRINT AT 11,10; PAPER 2; INK 9; FLASH 1;" RECORDING "
9050 SAVE "TITLE" LINE 9100
9060 BORDER 1: PAPER 1: CLS : PRINT INK 7;AT 9,2;"REWIND TAPE--PRESS ANY KEY TO"'''TAB 5;"VERIFY OR BREAK TO STOP"
9070 PAUSE 0: CLS : PRINT AT 11,10; INK 6; FLASH 1;" VERIFYING "
9080 INK 1: VERIFY "": PRINT AT 11,6; PAPER 2; INK 9;" RECORDING IS O.K. ": BEEP .5,10: PAUSE 200: INK 0: GO TO 9100
9090 CLS : PRINT PAPER 2; INK 9; FLASH 1;AT 10,10;" TAPE ERROR ": PAUSE 200
9100 ON ERR RESET : CLS : GO TO 1

Notes printed beside the listing:

  • 9000: TO SAVE: GOTO 9000
  • 9030: The number after @ must be in sequence for its position on the wafer. After the , name of program (7 char. max.). Number after LINE is the next sequence of program (could be the auto-start).
  • 9050: For tape–no @. Title limited to 10 char. max.
  • 9040/9090: ERROR TRAP
  • 9100: Autostart of program

I am writing to say thank you for doing a great job with TDM. I especially appreciate the Machine Code programs, utilities for the TS 2068. Thank you also for publishing the Source Code for Michael E. Carver‘s “BASIC2text” (Nov/DEC ’86). I really enjoyed that one. I learn so much from labeled, notated source code about the 2068 and the assembler language itself. Thank you for doing this, hope to see more.

Syd Wyncoop‘s column has been the best presentation of Beginning Z80 Machine Code I’ve ever seen. Now that the price has come down on Softsync‘s programs (now available from Zebra Systems): ZEUS ASSEMBLER, ZEUS MONITOR/DISASSEMBLER..well, they are great programs! Here is a tip for the Assembler, that some users may appreciate. The instructions that are included with ZEUS ASSEMBLER do not explain how to get a minus displacement value. For example: you would like to write a program or utility that resides at address 57344 (right at the start of the assembler), and you would like to have your assembled code at address 40000. You would use the ORGinate address 57344. Then to calculate the DISPlacement: 65536 – ORG(address) + assembled code (address) = DISPlacement or 65536 – 57344 + 40000 = DISP 48192. When satisfied with your code, SAVE “name”CODE 40000, length. To test it out, LOAD “name” CODE 57344 or whatever was used for the ORGinate address. Thanks again for a great magazine!

Richard Hurd
Warrenton, OR

Editor: Thanks for your continued support, Richard. [illegible] accept both criticism and praise.

Syd Wyncoop replies: I have an easier way for negative displacements in ZEUS. The problem is that my way better lends itself to use in hex. I will usually assemble my code to address #C000 and then add an offset of #2000 to all labels. Using these numbers, the Machine Code would be assembled at 49152 and run from 57344. These numbers are not as strange as they would first appear. They represent page breaks between 8k sections of memory, but this is only obvious when working in hex. The “#” in front of the above numbers is the notation used by ZEUS to denote a hex number. As long as you are running your code from any 256 byte page break, this technique works very well and is easy to use, if you use and understand hexidecimal numbers. Thanks for your comments.

Dear Tim,

You mentioned in the Jan/Feb ’87 issue that I would soon complete debugging the TS2068 ROM software. I would have said “debugging is an on going project” and the corrections that are completed are ready for release at any time. I am working on both the TS1000 and TS2068 software. I have the TS1000 (and TS1500) on 16k EPROM. With the price drop on 32k static RAMs we can now have a four chip computer with 32k bytes internal RAM and 8k space for special ROM code.

The latest bugs corrected for the TS2068 include both the HOME ROM and extension ROM software. These corrections allow a BASIC AROS to operate in the advanced video modes. With these corrections the PRINT USR (number) also works in the advanced video modes.

Bob Orrfelt
[address omitted]

I have not been able to figure out how to print a copy of a screen display on my QL Printer. I have tried to interpret the information provided by the QL Users Guide, the QL Printer Manual, and Jan Jones’ book “QL SuperBASIC”, all to no avail. After spending around $800 for my QL setup, I feel cheated that the capability is not specifically addressed in the manuals, if in fact the capability exists. Must I purchase a program in order to do this, such as a desktop publishing program? Your advice will be much appreciated.

Doug McRoy
Laurel, MD

Mike de Sosa answers: The following short program should solve your problem. This and more useful programs like it will be found in my new book TAKING THE QUANTUM LEAP: THE LAST WORD ON THE SINCLAIR QL, to be published by TIME DESIGNS in April. Always use PAPER 0 (black) when preparing a screen to dump, otherwise you’ll wear out your printer cartridge ribbon in a hurry. To make sure you capture all of your screen design, leave about 5 character spaces and 1 line space blank on the top, bottom, and sides of your screen design.

Save the program on your QL-BG (Easel) backup cartridge. Run the program on MDV1. Key and enter “dscreen” to get a suitable window for your design. Make your screen design. Turn your printer on. Key and enter “dump” to copy your screen on your printer.

If you want to SAVE your screen design, use:

SBYTES MDV2_anyname, 131072, 32768

To reload your design, use:

LBYTES MDV2_anyname, 131072
1 REMark Gprint_dump
2 a=RESPR(4000)
3 LBYTES mdv1_gprint_prt,a
4 OPEN_NEW #3,mdv1_dcode
5 PRINT #3,a
6 CLOSE #3
7 DEFine PROCedure DUMP
8 OPEN #3,mdv1_dcode
9 INPUT #3,a
10 CLOSE #3
11 CALL a,0,0,0,0,0,0,0,0,0,0
12 END DEFine DUMP
13 DEFine PROCedure DScreen
14 WINDOW 512,256,0,0
15 PAPER 0: INK 7: CLS
16 PAPER #2,0:INK #2,4: CLS #2
17 END DEFine DScreen

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.