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.