High Resolution Graphics

NOTE: Experienced builders only

Now for the biggie. In the past few years, there has been quite a bit of excitement generated by the idea of high-resolution graphics. Reasonably representative images can be drawn with them, and animation is considerably more exciting; especially when compared with the extremely high resolution of the type used in the latest generation of coin-operated video games. The Apple computer was advertised with a heavy emphasis on their high resolution, hard as it is to work with. The new Radio Shack Color Computer also offers several modes of resolution.

The following project can either stand alone as a plug-in peripheral, or be integrated as part of the TRS-80 keyboard unit. In either case, the specifications are:

1. Resolution of 384 dots wide by 192 dots deep.

2. Full compatability with all current software.

3. Simultaneous use and overprint of normal TRS-80 alphanumerics and graphics.

4. Addressing using six bits in contiguous memory blocks of 768 bytes each; sixteen total memory blocks are used.

The hardware involved in this project, including power supply and miscellaneous hardware, will be under $100 (probably closer to $70 by the time you read this), yet will compete easily with any high-resolution add-on for the TRS-80.

On the negative side, this project will invoive a great deal of wire wrapping or soldering, and will eat up one chunk of 16K memory address space when it is used. It will not actually compete with or replace the top memory block in the expansion box (there is no electronic conflict) but will be addressed from COOO to FFFF. Alternatively, it may be addressed from 8000 to BFFF. In either case, you do not need the expansion box to run this memory.

The TRS-80 screen has 1,024 locations in a grid of 64 characters across by 16 lines down. Within each of these grid elements are blocks 2

-----

pixels by 3 pixels (a pixel is a ‘picture element') for the familiar coarse graphics mode accessed with SET and RESET. If you turn the contrast fully down and reduce the brightness of the screen, the individual dots which make up the graphic and alphanumeric characters can be seen with a sharp eye; a magnifying glass will make the dots very clear.

In order to produce a complete screen line of letters, the locations in video memory are handed to a circuit which actually accesses them twelve times - once for each pass the electron beam makes horizontally. At each pass, a row of dots corresponding to part of the whole line of letters is shifted out to the video beam. Each dot (or ‘undot’) then turns the hearn on or off for the tiny fraction of a second it takes to sweep across 1/384th of the screen.

The point is clear: an electronic event takes place for every dot on every line of the screen. This means that it is possible to create an individual, addressable electronic event for each screen dot.

The process might work like this:

1. Devise a circuit whose timing characteristics are identical to the video timing of the usual TRS-80 circuits.

2. Instead of addressing the same video memory on twelve consecutive screen lines, have the addressing select different memory for each line,

3. Have the contents of that memory filled by the TRS-80, and displayed on the same or a different monitor. The add-on has its own video circuitry, but can be displayed on the same monitor because step 1 specifies that the timing characteristics must be identical to those in the TRS-80. It’s like an auto with 4-wheel drive, where all wheels are capable of working together; or a dual-capstan tape recorder, where both capstans pull the tape to ensure steady contact with the playback head.

The circuit shown opposite presents the complete high-resolution circuitry. There are two ways of building this circuit since the areas shaded in grey are already present within the TRS-80. If you wish, you can solder directly to those circuits inside the computer, saving yourself some parts and perhaps a bit of time. Otherwise, the entire circuit can be built separately.

page 145

-----

Figure 6-1. Complete high resolution circuit

page 146

-----

Figure 6-1b. High resolution memory.

page 147

-----

Figure 6-2. Hires clock circuit

Figure 6-2 is the clock. The 10.6445 MHz crystal is the same one used in the TRS-80; Radio Shack sells it for $3.95, on special order. A small trimmer capacitor is included so that the frequency of the high resolution board can be aligned identically to that in the computer.

Figure 6-3 is the master video countdown chain and timing circuitry, also nearly identical to that inside the TRS-80. There are a few exceptions. The logic necessary for 32 characters per line is not present (it is not needed in high resolution mode, although the normal alphanumerics may be displayed in 32-character mode simultaneously with the hi-res graphics screen). Also, the four outputs of Z6 do not feed any latches or character generators; instead, they become the line of dots addresses for high resolution memory. Identical (top and side) screen blanking is used.

Figure 6-1. is the high-resoiution memory itself. The familiar 4116 type, 16K dynamic memories are used in this circuit (250 nS or less is essential), but with a difference. The hi-res board must generate its own memory refresh, yet hand over control to the TRS-80 when it needs to select memory into which it will write information. Thus, Z20 multiplexes the on-board refresh/select (MRAS, MCAS, MMUX) with the TRS-80 select (GRAS, CCAS, CMUX).

The switch is made by the simultaneous presence of addresses 14 and 15 on the address bus.

-----

On-board refresh/select is generated by the clock in combination with two flip-flops (Z3a/b), producing select in this order:

1. Z2 pin 8, selects the lowest portion of the address; as such, it is the fastest changing meinory select signal.

2. Two clock cycles lyter, Z2 pin 11, produces a signal which will be gated by Z9 and inverted to produce MRAS (row address strobe).

3. One clock cycle later, MMUX goes high, produced by the clocking of Z3a.

4. One clock cycle later, MRAS is continued as Z2 pin 11 goes low by Z2 pin 9 going high. The transition is simultaneous and virtually invisible.

5. At that time, MCAS is produced when Z3b is clocked low at the NOT Q output.

6. Memory data is stable at this time, and two clock cycles later, LATCH is issued by Zle, latching the data into Z16 for its trip through shift register Z17.

Figure 6-3 shows the creation of horizontal and vertical synchronization signals, and the horizontal and vertical screen positioning controls. This circuitry again is identical to that in the TRS-80, as is Figure 6-4, the video mixing circuitry.

There is only one critical construction area in the device, and that is the circuitry surrounding the 10.6445 MHz crystal (216, R4-5, Cl). The wires in this area must be very short, and all the parts clustered together. Capacitor C1 should be the only part of the circuit responsible for tuning the crystal’s frequency, not random capacitance

Figure 6-3. Master video circuit.

page 148

-----

Figure 6-4. The video mixing circuitry.

introduced by a haphazard bunch of wires.

Other than the wire layout near the crystal, construction is time-consuming but straightforward. I recommend wire wrapping the entire circuit; use different colors for data, address, video, ground, etc., so that troubleshooting will be simplified.

The completed circuit will have these external controls:

1. Power. Three voltages, +5, -5, and +2 are necessary. -5 volts must he present first and last.

2. Mixing. This controls the intensity of the high-resolution board with respect to the TRS-80 alphanumerics and graphics.

3. Fine tuning. This adjusts the frequency of the 10.6445 MHz crystal to that of the TRS-80. Occasional adjustments will be necessary with temperature changes.

4. Vertical and horizontal positioning. These control the placement of the image on the screen; it should coincide with the alphanumeric screen normally produced by the TRS-80.

5. Input. This accepts a cable running from the TRS-80 video jack, which would normally attach to the video monitor.

-----

6, Output. This accepts a cable from the video monitor, and provides an output which mixes the TRS-80 alphanumerics and graphics with the high-resolution dots.

To use the device, attach a 5-pin DIN cable between the TRS-80 video jack and the input jack hi-res board. Connect the video monitor to the output jack of the hi-res board, then attach a 40-pin edge connector from the TRS-80 to the hi-res board. Turn the mixing control fully countercockwise (Hi-Res Out). Power up the hi-res board, and then the rest of the system in normal order.

As usual, MEMORY SIZE? should appear; if so enter 49152 (for a 48K computer). The system should operate as usual. Enter the following program:

10 FOR X = 15360 TO 16383
20 POKE X,129
30 NEXT
40 FOR X = -16384 TO 0
50 POKE X,175
60 NEXT
70 GOTO 70

The screen will fill with small graphics blocks. There will be a pause of almost a minute while the rest of the program is running. Put an AM radio next to the computer to determine when the program’s complete. Now bring the mixing control (Figure 6-4a) of the hi-res board clockwise until dots, herringbone, jitter and/or other interference appears on the screen. This is a good sign.

If you have a stable enough screen to see the alternating dot patterns produced by the hi-res board, then adjust the horizontal and vertical positioning controls, if necessary, to center the image with that of the TRS-80. To remove the jitter and herringbone adjust the fine tuning control. Now your screen should display an alternating pattern of TRS-HQ graphics, along with an overlay of thin vertical lines of hi-res graphics dots. If you have any difficulty getting this pattern, or if there are any other problems, refer to the troubleshooting section.

Use of the Hi-Res board is simple. Addresses from C000 through C03F contain the information to create the first line of dots, addresses C040 through COVF contain the second line, etc. A contiguous block of memory from C000 through C2FF is used for the first twelve lines of dots, But since the display is twelve lines, and not sixteen, the addressing takes a jump in order to be compatible with the familiar 64 x 16 normal screen display. Thus, addresses C300 through C3FF are not used, and the second group of 12 dot lines begins at address C400 and continues

page 149

-----

through C6FF. Here is a full memory map of the Hi-Res board:

Hi-Res 8oard Memory Map

C000 - C03F     Group 1, Line 1, Screen Line 1 
C040 - C0PF     Group 1, Line 2, Screen Line 2 
C0B0 - C0BF     Group 1, Line 3, Screen L1ne 3 
C0C0 - C0FF     Group 1, Line 4, Screen Line 4 
Cl00 - C13F     Group 1, Line 5, Screen Line 5 
C140 - C17F     Group 1, Line 6, Screen Line 6 
C180 - C1BF     Group 1, Line 7, Screen Line 7 
C1C0 - C1FF     Group 1, Line 8, Screen Line 8 
C200 - C23f     Group 1, Line 9, Screen Line 9 
C240 - C27F     Group 1, Line 10, Screen Line 10 
C280 - C2BF     Group 1, Line 11, Screen Line 11 
C2C0 - C2FF     Group 1, Line 12, Screen Line 12
------------------------------------------------
C400 - C43F     Group 2, Line 1, Screen Line 13 
C440 - C47F     Group 2, Line 2, Screen Line 14
                        "
                        "
CB80 - CSBF     Group 2, Line 13, Screen Line 23 
CCC0 - CSFF     Group 2, Line 12, Screen Line 24
------------------------------------------------
CB00 - CAFF     Group 3, Lines 1 - 12 
                Screen Lines 25 - 36
------------------------------------------------
CC00 - CUFF     Group 4, Lines 1 - 12 
                Screen Lines 37 - 48
------------------------------------------------
D000 - 02FF     Group 5, Lines 1 - 12 
                Screen Lines 49 - 60
------------------------------------------------
D400 - DFFF     Group 6, Lines 1 - 12
                Screen Lines 61 - 72
------------------------------------------------
DB00 - DAFF     Group 7, Lines 1 - 12
                Screen Lines 73 - 84
------------------------------------------------
DC00 - DEFF     Group 8, Lines 1 - 12
                Screen Lines 85 - 96
------------------------------------------------
E000 - E2FF     Group 9, Lines 1 - 12
                Screen Lines 97 - 108
------------------------------------------------
E400 - E6FF     Group 10, Lines 1 - 12
                Screen Lines 109 - 120
------------------------------------------------
E800 - EAFF     Group 11, Lines 1 - 12
                Screen Lines 121 - 132
------------------------------------------------
EC00 - EEFF     Group 12, Lines 1 - 12
                Screen Lines 133 - 144
------------------------------------------------
F000 - F2FF     Group 13, Lines 1 - 12
                Screen Lines 145 - 156
------------------------------------------------
F400 - F6FF     Group 14, Lines 1 - 12
                Screen Linee 157 - 168
------------------------------------------------
F800 - FAFF     Group 15, Lines 1 - 12
                Screen Lines 169 - 180
------------------------------------------------
FC00 - FEFF     Group 16, Lines 1 - 12
                Screen Lines 181 - 192
------------------------------------------------

Only six bits of each byte are used (the least significant six); thus, six one-bit-wide, memory chips are used in the circuit. The bits fit into their respective lines and memory addresses as follows:

-----

Before continuing, clear out the hi-res memory with:

FOR X = -16384 TO 0 : POKE X,0 : NEXT

Drawing simple lines is an easy process; for a horizontal one, just enter:

FOR X = -12288 TO -12224 : POKE X, 63 : NEXT

A vertical one is produced by stepping through groups:

5  CLS                            : REM KILL ALPHANUMERICS
10 FOR Y = -16352 TO 0 5TEP 1024  : REM STEP THROUGH GROUPS 
20 FOB X = Y TO V+(12*64) STEP 64 : REM STEP THROUGH LINES
30 POKE X,1 : NEXT X              : REM SET ONE PIXEL
40 NEXT V                         : REM TO NEXT LINE GROUP
50 GOTO 50                        : REM KEEP DISPLAY INTACT

Diagonal lines are more complicated, because more than two sets of increments must be specified; but simple diagonals can be created. For diagonals and variable-width lines, change listing to read as follows:

10 INPUT Q : INPUT R : CLS
20 FOR Y = -16352 TO 0 STEP 1024
30 FOR X = Y TO Y+(12*64) STEP 64+Q
40 POKE X,(R AND 63) : NEXT X
50 NEXT Y
66 GOTO 60

For serious graphics, assembly language programming is the only way real speed can be achieved. This is a very ‘custom’ type of prograxnming, and only the simplest of subroutines will be presented here. For drawing circles, ellipses, and curves the functions will have to be stored in a look-up table and calculated. Listing 6-1 is an assembly listing to draw graphic lines on the screen, given a set of coordinates.

page 150

-----

              00100 ; ########################################################
              00110 ; ROUTINE TO. DRAW HORIZONTAL AND VERTICAL LINES FR. BASIC
              00120 ; ########################################################
              00130 COOO    
              00140 HIRES   EQU     0CD00H       ; START OF HIRES GRAFIX OA7F    
              00150 XFER    EQU     0A7FH        ; VARIABLE XFER ROUTINE
              00160 ;
7FOO          00170         ORG     7F00H        ; SOMEWHERE IN MEMORY
              00180 ;
              00190 ; #######################################################
              00200 ; SUBROUTINE TO DETERMINE THE CORRECT BASIC USR(X) CALL 
              00210 ; #######################################################
              00220
7FOO CD7FOA   00230 ENTRY   CALL    XFER         ; GET VALUE FROM BASIC
7F03 7C       OD240         LD      A,H          ; GET MSB INTO ACCUM.
7F04 85       00250         ADD     A,I          ; ADD LSB FROM HL PAIR
7F05 A7       00260         AND     A            ; TEST IF XT IS ZERO
7F06 2BOB     00270         JR      Z,PCLS       ; CLEAR SCREEN ROUTINE
7F08 FE01     00280         CP      1            ; TEST IF IT IS ONE
7FOA 2815     00290         JR      Z,PHORIZ     ; HORIZONTAL LINE ON 1
7FOC FE02     00300         CP      2            ; TEST IF IT IS A TWO
7FOE 2S3D     00310         JR      Z,PVERT      ; VERTICAL LINE ON 2
7F10 C39719   00320         JP      1997H        ; SN? ERROR IF NOT 1,2,3
              00330 ;
              00340 ; #######################################################
              00350 ; SUBROUTINE TO CLEAR THE SCREEN IN HIGH-RESOLUTION MODE 
              00360 ; BASIC FORMAT: M=USR(A). A MUST ALWAYS BE ZERO.
              00370 ; #######################################################
              00380 ;
7F13 AF       OO390 PCLS    XOB     A            ; GET CHARACTER T0 WRITE
7F14 F5       00400         PUSH    AF           ; SAVE THAT CHAAACTER
7F15 2100CO   00410         LD      HL,HIBES     ; GET BEGINI4INB OF.HI-RES
7F18 F1       00420 PCLEAR  POP     AF           ; RESTORE ZERO CHARACTER
7F19 77       00430         LD      (HL),A       ; PUT IT IN PLACE IN HEM 
7F1A F5       00440         PUSH    AF           ; SAVE CHARACTER AGAIN
7FlB 7C       00450         LD      A,H          ; GET MSB 0F CURRENT LOG.
7F1C B5       00460         OR      L            ; GET LSS ANO TEST PAIR.
7F1D 20FS     00470         JR      NZ,PCLEAR    ; LOOP BACK .FOR NEXT
7F1F F1       00480         POP     AF           ; GET STACK BAG:K IN SHAPE
7F20 C9       00490         RET                  ; BACK TO CALLING RQtTINE
              00500
              00510 ; #######################################################
              OO520 ; SUBROUTINE TO DRAW A HORIZONTAL LINE. BASIC FORMAT:
              00530 ; POKEN,B:C1=INT(C/6):C2=C-1*6:POKEN+1,C1:POKEN+2,C2:
              00540 ; D1=INT(D/6):D2=0-D1*6:POKEN+3,D1:POKEN+4,D2:M=USR(1)
              00550 ;
              00560 ; B=LINE NUMBER (0-11, 16-27, 32-43, 48-59, 64-75, 80-91,
              00570 ;       96-107, ll2-123, 128-139. 144-155, 160-171, 176-
              00580 ;       187, 192-203, 208-219, 224-235, 246-251
              OG590 ; C=ORIGINATION POSITION (0-383)· 
              00600 ; D=DESTINATION POSITION (0-383). C MUST BE LARGER THAN D
              00610 ; #######################################################
              00620 ;
7F21 OD21897F 00630 PHORIZ  LD      IX,N         ; POINT T0 THE STORAGE
7F25 CD6E7F   00640         CALL    FINDER       ; GET STARTING POSITION
7F28 3ABC7F   00650         LD      A,(N+3)      ; GET VALVE AT "N+3"
7F2B 4F       00660         LD      C,A          ; PLACE IN MSB OF BC
7F2C AF       00670         XOR     A            ; CLEAR ACCUM TO ZERO
7FPD 47       00680         LD      B,A          ; PLACE IN LSB OF BC
7F2E ES       00690         PUSH    HL           ; SAVE START LOC'N
7F2F D5       00700         PUSH    DE           ; READY FBR XFER BACK 
7F30 E1       00710         POP     HL           ; TRANSFERRED BACK
7F31 09       00720         ADD     HL,BC        ; PERFORM THE ADDITION
7F32 E5       00730         PUSH    HL           ; READY FOR TRANSFER
7F33 Dl       00740         POP     DE           ; AND GET INFO DESTIN'N
7F34 E1       00750         POP     HL           ; RESTORE ORIGINAL VALUE
7F35 3ABB7F   007RO         LD      A,(N+2)      ; GET VALUE AT "N+2"
7F38 B6       00770         OR      (HL)         ; ADD TO CURRENT LOC'N
7F39 77       00780         LD      (HL),A       ; AND PUT INTO PLACE
7F3A 23       00790         INC     HL           ; NEXT SCREEN POSITION
7F38 AF       00800 LOOP1   XOR     A            ; CLEAR ACCUM TO ZERO
7F3C 3A3F00   00810         LD      A,(03FH)     ; VALUE TO FILL BYTE
7F3F ED52     00820         SBC     HL,DE        ; PERFORM SUBTRACTION 
7F41 2S04     00830         JR      1,HOROUT     ; OUT OF ROUTINE
7F43 77       00840         LD      (HL),A       ; PUT BYTE IN PLACE
7F44 23       00850         INC     HL           ; GET NEXT SCREEN POS'N
7F45 18F4     00860         JR      LOOP1        ; GO BACK FOR NEXT FILL
7F47 3ABD7F   00870 HORCUT  LD      A,(N+4)      ; GET BACK FINAL BYTE
7F4A 86       00880         OR      (HL)         ; ADD TO VALUE ON SCREEN
7F4B 77       008SO         LD      (HL),A       ; PUT IT ON THE SCREEN
7F4C CS       00900         RET                  ; AND BACK TO BASIC
              00910 ;
              00920 ; ########################################################
              00930 ; SUBROUTINE TO DRAW A VERTICAL LINE ·  48K RAM IN PLACE.
              00940 ; BASIC FORMAT:
              00950 ; POKEN,B:C1=INT(C/6):C2=C-C1*6:POKEN+1,C1:POKEN+2,C2
              00960 ; D1=INT(D/6):D2=D-1*6:POKEN+3,D1:POKEN+4,D2:N=USR(2)
              00970 ;
              00980 ; E=HORIZ0NTAL POSITION (0-255)
              00990 ; F=LINE NUMBER (SEE HORIZONTAL LINE, ABOVE)
              01000 ; G=LINE NUM3ER (SEE HORIZONTAL LINE, ABOVE)
              01010 ; ########################################################
              01020
7F4D DD21897F 01030 PVERT   LD      IX, N        ; POINT TO THE STORAGE

Listing 6-1. Hires demonstration oroeram Listing Continued... -----

Without TRS-80 memory parallel to that in the hi-res board, it is not possible to read the contents of the high-resolution memory directly.

The contents must be stored in some form elsewhere. When the high 16K block is in place in the expansion box, however, six bits of each byte are identical to those on the screen. Ideally, the entire block of high resolution memory (16K by 6 bits) and TRS-80 memory (16K by 8 bits) should be cleared out by POKEing 0 in place first. Then an in-computer image of the high resolution screen can be maintained at all times.

Another interesting mode of using the high resolution board is with a separate screen. Normal alphanumerics can appear on the TRS-80 monitor, while the high-resolution graphics can be presented on a parallel screen. This way, the table calculations and information reported can be displayed on the computer’s monitor for reference. The high-resolution screen will be unaffected by anything done by the TRS-80 unless its memory is being specifically written to. Not only can action games of the Startrek type be more interesting and challenging - with visuals and info displayed on different screens - but for experimentation and analysis, the high-resolutian display is unbothered by program changes.

To use this mode, merely leave your TRS-80 monitor plugged into the computer. Then send the video information in the hi-res board to another video monitor, or to an ordinary television set via an RF modulator.

Troubleshooting

With a complicated project like this, there is a good chance that the system will not work perfectly the first time. The main problems together with their causes and solutions are outlined below.

l. The screen keeps tearing or jittering no matter what setting the fine tuning is on. If the fine tuning has no effect at all, it may be defective. Replace it. If the tuning gets better, but can’t quite pull it in, you can put another capacitor in parallel to increase the capacitance, or replace the crystal (in either the hi-res board or the TRS-80) with one better matched to the other.

2. The high-resolution graphics cannot be changed, remaining the same as when the power was turned on. The memory write circuits are not working properly. Check the memory-select wiring at Z20; the write

-----

Continued Listing

7F51 CD6E7F   01040         CALL    FINDER       ; GET SCREEN START BYTE 
7F54 ES       01050         PUSH    HL           ; SAVE THE START VAWE
7F55 DD218C7F 01060         LD      IX, N+3      ; POINT TO THE TABLE
7F59 CDGE7F   01070         CALL    FINDER       ; AND DO THE WORK
7F5C E5       01080         PUSH    HL           ; REAOY VALUE TO TRANSFER
7F50 D1       01090         POP     DE           ; AND TRANSFER TO DEST'N
7FSE El       01100         POP     HL           ; RESTORE START POSITION
7F5F 014000   01110         LD      BC,40H       ; SCREEN BYTE LINE OFFSET
7F62 AF       01120         XOR     A            ; CLEAR CARRY FLAG
7F63 3A887F   01139         LD      A,(N+2)      ; GET BYTE FROM STORAGE 
7F66 7?       01140 LOOP2   LD      (HL),A       ; STASH IT ON SCREEN
7F67 09       01150         ADD     HL,BC        ; MOVE UP ON THE SCREEN 
7F68 ED52     01100         SBC     HL,DE .      ; CHECK IF DONE YET
7F6A 20FA     01170         JR      NZ,LOOP2     ; BACK IF NOT DONE
7F6C 77       01180         LD      (HL),A       ; PUT LAST BYTE IN
7F6D C9       01190         RET                  ; BACK TO BASIC
              01200 ;
              01210 ; #######################################################
              01220 ; FINDER SUBROUTINE LOCATES PROPER BYTE WITHIN HIRES AREA
              01230 ; #######################################################
              01240 ;
7F6E 2100CO   01250 FINDER  LD      HL,HIRES    ; GET HI-RESOLUTION SCRN
7F71 DD1E00   01260         LD      A,(IX)      ; GET START BYTE OFFSET
7F74 47       01270         LD      8,A         ; PLACE IN 6 REGISTER
7F75 AF       01260         XOR     A           ; CLEAR THE CARRY FLAG
7F76 CB18     01290         RR      B           ; DIVIDE BY TWO AND ...
7F78 CB19     01300         RR      C           ; ... ROTATE IN ORDER ...
7F7A C81B     01310         RR      B           ; ... ACTUALLY TO ...
7F7C C819     01320         RR      C;          ; ... MULTIPLY BY 64
7F7E 09       01330         ADD     HL,BC       ; MAKE NEW SCREEN POS’N
7F7F E5       Qt340         PUSH    HL          ; READY IT FOR TRANSFER
7F80 01       01350         POP     DE          ; TRANSFER TO DESTIN'N
7F81 D07E01   01360         LD      A, IIX+1)   ; GET START BIT OFFSET 
7F84 4F       01370,        LD      C,A         ; PLACE IN MSB OF BC 
7F85 AF       01380         XOR     A .         ; CLEAR ACCUM TO ZERO
7F86 47       01390         LD      B,A         ; PLACE IN LSB OF BC
7F87 C9       01400         ADD     HL,BC       ; GET NEW START BIT
7FBB CB       01410         BET                 ; BACK TO CALLING ROUTINE
              01420 ;
7F89          01430 N       EOll $              ; MOMORY STORAGE POS'NS
              01440 ;
06CC          01450         END 06CCH           ; BACK TO BASIC

00000 TOTAL ERRORS
30026 TEXT AREA BYTES LEFT

ENTRY  7F00 00230
FINDER 7F6E 01250  00648 01040 01070
HIRES  C000 00140  00410 0125D
HOROUT 7F47 0D870  00830
LOOP1  7F3B 00800  00860
LOOP2  7F66 01140  01170
N      7F89 01430  00630 00650 00760 00870 01030 01060 0113D
PCLEAR 7F1B 00420  00470
PCLS   7F13 00390  00270
PHORIZ 7FP1 00630  00290
PVERT  7F4D 01030  00310
XFER   0A7F 00150  00230
-----

lines to the memory (Z11); and the write line from the computer (from edge card pin 13).

3. The high-resolution graphics keep changing without writing to them. The memory-select circuits may be selecting write for both read and write; check Zll. More likely, the memory refresh/select circuitry is miswired; check Z9a and Z3.

4. When creating lines of graphics, the dots do not appear in the correct place. This indicates the memory data and /or address lines are miswired; check the lines from the computer (pins 4-7, 9-11, 17-18, 20, 22, 24-28, 30-32, 34-36, 38 and 40), making sure they are in the correct order. Also check each memory circuit to be sure the address lines (pins 4-7, 10-13, and 15) are parallel in each memory IC. Finally, be sure Z4 correctly feeds Z10; Z5 correctly feeds Zll; Z6 correctly feeds Z12; and Z7 correctly feeds Z13. These four circuits are the memory count/multiplex circuits. Also check that Z10, 11, 12 and 13 correctly feed Z18 and 19.

5. No graphics are produced. This is a tough one. The fault could lie with

(a) the clock formed by Z1a-c

(b) the memory refresh circuits Z9b and Z3

(c) latch and shift registers Z16 and Z17

(d) memory circuits Z21 to Z26

(e) video output formed by Z30, Q1 and Q2.

Check the screen display carefully, because if any of these sections are working (except the video output) the screen will be affected in some way, even if it is minor. If herringbone or some tearing is present when the fine tuning is adjusted, then the video output and sync circuits are probably okay. Also, be sure that the mixing control is not turned fully counterclockwise (TRS-80 on, hi-res off).

6. The computer crashes to MEMORY SIZE? or otherwise acts problematically. The hi-res board has no effect on the computer. No data is written to the computer from the hi-res board at any point; it only receives information. If the computer crashes, then faulty wiring is likely.

page 152

-----

Photo 6-1. Hi-Res graphics example.