SECTION 6: POWER ON
Connecting AC Power
As you prepare to hook up to the main power supply, ensure
that the computer and all peripherals are switched OFF.
Locate the power cord exiting from the rear of the computer
and plug it inta a 110V AC outlet. All peripherals attached to
the computer must also be supplied with AC power
independently.
Turn on the monitor and let it warm up for a minute or
two,
Power Up & Reset for Non-Disk Owners
Press the BREAK key and switch the computer on. After a
moment's hesitation, the computer will respond with the
following prompt:
MEMORY SIZE?
MEMORY SIZE? _
(If this is not displayed clearly or if the monitor is not
in a cooperative mood, see the relevant sub-sections below on
monitor adjustment).
We may ignore the MEMORY SIZE? question for the moment (see
SECTION 10) and simply press the ENTER key.
The computer in its turn replies with,
READY
>_
To restart the system in ROM once the power is on, press
the BREAK key first and then the two RESET keys
simultaneously.
Power Up and Reset for Disk Owners
- Switch on drive(s).
- Switch on computer.
- Wait until drives stop running.
- Insert the system disk in drive 0, with the label
facing the arm of the door (see Figure 6.0).
- Close the drive door gently. The door will not
close if the disk is not fully inserted.
- Press both RESET keys simultaneously. The computer
responds with the system logo.
Figure 6.0
You should now make a backup copy of your system disk
before proceeding any further. This is most important. It is
not beyond the realms of possibility to destroy the
information on disk at this initial phase of investigation and
experimentation.
The BACKUP utility is described on page 80 of the DOSPLUS
manual.
Disk Power Up Malfunctions
If the drives fail to stop running after switching the
computer on or the system fails to boot, check the following:
- Are the drive cables connected correctly and
securely at both the computer and drive outlets?
Note that the drive connection is "backwards"
relative to TRS80 Model I, with cable up vs. down.
- Is the disk in drive 0 a system disk?
- Is the drive running smoothly? If not, the disk is
not securely mounted on the drive spindle.
Re-insert the disk.
To RESET the disk operating system (to "boot" the system),
hit the two RESET keys simultaneously.
Monochrome Monitor Adjustment
1. BRIGHTNESS - turn fully clockwise.
2. CONTRAST - turn fully clockwise.
If the display is not stable (ie. rolls vertically,
horizontally or tears diagonally) make the following two
adjustments. If the display is stable, then skip this section
and go on to final adjustments.
3. HORIZONTAL HOLD - adjust for a picture that does not "tear"
diagonally and is stable horizontally. It may still have
vertical roll at this point.
4. VERTICAL HOLD - adjust for a picture that does not roll
vertically and does not have any multiple or overlayed
images.
Make the following final adjustments:
5. BRIGHTNESS - turn counterclockwise till the background scan
lines are just no longer visible (but the letters should still
be brightly displayed.
6. CONTRAST - turn counterclockwise for the sharpest, roundest
characters with a bright, easy-to-read display. The individual
dots that make the letters should be visible, and the black
space between the letters Z and E at the top and bottom of the
letters should be seen. The following drawing illustrates
this:
Figure 6.1 - High and normal contrast drawings
GOOD CONTRAST CONTRAST TOO HIGH
If you cannot achieve crisp characters with the following
adjustments, then either - adjust the SIGNAL ADJUSTMENT (if
any) to reduce the amplitude of the video OR install a series
resistor in line (10 - 33 ohm) with the "hot side" of the
video cable.
If you intend to use the LNW80 computer in the inverse
video display mode, then you will have to repeat the above
adjustments while in the inverse display mode. Most monitors
will probably not be properly adjusted for both inverse and
normal display modes with the same settings. When you turn on
the inverse display mode, don't, be suprised to see the screen
go blank. When adjusting for BOTH display modes simply adjust
to your own preference.
NTSC Color Monitor Adjustment
An NTSC color monitor has some of the same adjustments as
your home television: BRIGHTNESS (may be called BACKGROUND),
CONTRAST, COLOR, TINT, VERTICAL H0LD, HORIZONTAL HOLD and
SHARPNESS (sometimes called FOCUS). The first step of
alignment is to perform the same adjustments, as with a
monochrome monitor (the procedure is listed in the previous
section). Some of the controls found in a monochrome monitor
(i.e., horizontal and vertical sync) may, or may not be
present in your color monitor. If the control cannot be found,
then it should be assumed that the control is automatically
set internally and needs no adjustment. Check the owner's
manual for more details concerning your monitor.
Monochrome Operation
The NTSC color monitor cannot display the 64-column text
screen with clarity. With some monitors it may be possible to
read the characters in this mode, but it will require the
optimum setting of the above-mentioned controls and a very
high quality set with a +6MHz luminance bandwidth. It may also
require that the NTSC color monitor be connected to the B/W
video output since the bandwidth is higher through that
display channel, and the color setting on the set should be
turned completely off.
Color Operation
In order to align your monitor for color operation, you
must first display the color bar pattern generated by the
program listed below. IF THE NTSC MONITOR IS YOUR ONLY
MONITOR, THEN YOU MUST PERFORM THE MONOCHROME DISPLAY
ADJUSTMENTS MENTIONED IN THE PREVIOUS SECTION TO MAKE THE
DISPLAY READABLE WHILE TYPING IN THE PROGRAM THAT IS LISTED
BELOW. This program is written using LNWBASIC and is easy to
type in. It does require that the programmer has a working
knowledge of DOSPLUS 3.4 and LNWBASIC. These details can be
found elsewhere in this manual and in the LNWBASIC USER MANUAL
or the DOSPLUS 3.4 USER MANUAL.
1 'LNWBASIC Color Bar Test Program
10 MODE2
20 PCLS
30 FLS(191)
40 FOR X=0 TO 7
50 COLORX
60 Xi=16*X:Y1=0:X2=(16*X+14):Y2=191
70 LINE Xl,YlgX2,Y2,SET,BF
80 NEXTX
90 END
Once you have typed in the program, save it for future use
by typing:
SAVE"COLOR/BAS"
This program should generate 8 color bars in the following
order:
White Green Yellow Red Magenta Blue Blue-green Black.
Once the color bar program has been run, make the following
adjustments:
1. BRIGHTNESS (May be Called BACKGROUND) - adjust such that 7
color bars (may appear as 7 grey areas) appear, but the BLACK
bar (eighth bar) at the right of the screen is completely
black.
2. CONTRAST - adjust so that the bars have adequate range of
intensity. The BLACK bar should be black, and the WHITE bar
should be a bright white. The thin black borders between the
color bars should have the sharpest edges attainable.
3. COLOR - adjust so that the colors (may not be the correct
colors yet) are bright and clean, but not saturated so much
that there is color "bleeding" and distortion in the black
borders between the color bars.
4. TINT - adjust the tint so that the colors displayed on the
screen match the 8 color bars and suit your individual
preference. From left to right:
white green yellow red magenta blue blue-green black
5. SHARPNESS - Between the color bars are thin, two-pixel
borders of black. Adjust the sharpness or focus such that the
sharpest edges are obtained.
RGB Monitor Adjustment and Operation
The RGB monitor generally requires no more adjustments than
a monochrome monitor:
l. Perform the MONOCHROME MONITOR ADJUSTMENTS
2. Type in the COLOR BAR program listed in the previous
section and run it using LNWBASIC.
Power Off
When turning off your computer, allow at least 15 seconds
before turning it on again. This time allows any power that
may not have drained away in the electrical circuitry to do
so,
Memory Test
Although your LNW80 has been thoroughly tested at our
manufacturing plant, we include this memory test in case you
ever need to use it in the years ahead.
10 REM Memory Test for LNW80
20 REM This is a simple test of computer memory.
30 REM Each memory location is tested by using the
40 REM the GOSUB instruction. It should run
50 REM continously until it reaches location 100
60 REM or so. Total memory is printed on the top
65 REM left hand corner of the screen.
70 CLS
80 PRINT CHR$(23)
85 PRINT @ 0,MEM
90 PRINT @ 470,MEM
100 IF MEM < 100 THEN STOP ELSE GOSUB 90
Now type:
RUN
means that you press the ENTER key after typing RUN.
The program should run continuously until location 100 or
so is encountered.
High Speed / Low Speed Test
We can make convenient use of this program to do another
test. As was indicated earlier, the LNW80's microprocessor
operates at two clock speeds: 4MHz and 1.77MHz. By timing the
program with the key in the up position (HIGH) and
down position (LOW), the following approximate results should
be obtained:
HIGH 119 seconds
LOW 222 seconds
You may wonder why the result for the faster clock speed is
not twice that of the slower. The reason it isn't is that the
CPU works at a faster clock speed than the Level II ROMs are
capable of. As a result, the CPU must slow slightly (using
"wait states") so that the ROMs can keep up.
Graphics Test
Running the program below will fill the display with the
standard text and low-resolution graphics characters available
from the character generator.
10 REM Mode 0 text and graphics test.
20 LET Y=0
30 FQR X=15360 TO 16363
40 IF Y>192 LET Y=0
50 POKE X,Y
60 LET Y=Y+1
70 NEXT X
80 GOTO 80
To exit from this program, you must press the key.
Line 80 in the program puts the program into an infinite loop
so as not to disrupt the display on the screen.
SECTION 7: LNW80 GRAPHICS
Introduction
The color graphics capabilities of the LNW80 make up one of
the computer's real highlights. You now have a machine which
not only allows good data manipulation, but also has high
resolution graphics. The LNW80 comes to you with LNWBASIC, a
tailor made BASIC, designed to extract the maximum potential
from the machine in terms of color and black and white
graphics.
This section introduces you to the machine's graphics
capabilities and lays the foundation for your adventures into
LNWBASIC. The second half of this section was written for the
benefit of machine-language programmers. It is not vital
reading for the novice.
Note: As LNWBASIC is only supplied on disk, a subsection is
included for non-disk owners on how to generate both black 6
white and color graphics.
Graphics Modes
The LNW80 has four different graphics modes:
Mode 0 Low Resolution (LORES) graphics mixed
with text. Control of 128 x 48
picture elements (pixels).
Mode l High Resolution (HIRES) graphics
mixed with LORES graphics and text.
Control of 480 x 192 pixels.
Mode 2 LORES Color, with control of
128 x 192 pixels. There are 8 colores
available in this mode.
Mode 3 HIRES Color. Control of 480 x 192
pixels. The screen may be mapped in
color blocks of 128 x 16 pixels.
There are 8 colors available in this
mode.
Note that the picture element (pixel) size depends on the
graphics mode in operation.
Mode 0 - Low Resolution Graphics a Text
In this mode you have 128 (64x2) points of reference across
the screen and 48 (16x3) points down the screen.
Mode 0 is the normal operating mode. The mode 0 screen is
laid out as shown on the video display worksheet in Appendix
D. Turning your attention to this for a moment, you will see
that there are 64 character positions across the screen,
numbered from 0 to 63. There are 16 lines of 64 characters
each, ending up at character position 1023 on the lower
right-hand corner. You will notice also that each character
which is outlined in dark ink is subdivided into 6 smaller
units. These smaller units are called graphics cells. Neither
character positions nor graphic cells are physical areas on
the screen, but rather areas of the screen that the computer
has chosen.
Figure 7.0 - character position and Graphics cell
The mode 0 graphics cell corresponds to the mode 0 pixel.
The term graphics cell is retained here, as it is often used
to describe the size of pixel which is controllable using SET
and RESET in BASIC.
To see the size of one mode zero pixel, use the following
BASIC statement:
CLS : PRINTS 480, CHR$(129)
or
CLS : SET (64,21)
A text character appears as a 5 x 7 matrix within the
sounds of the 12 x 6 dot matrix that makes up a character
position.
Figure 7.1 - 12 x 6 dot matrix of character posn
with 5 x 7 text character imposed on
it.
The 5 x 7 format allows a one dot space between characters
and a 5 dot space between lines.
Figure 7.2 - Interspacing of text characters
Mode 1 - High Resolution Graphics & LORES Graphics a Text.
In this mode, you may reference 480 dots across the screen
and 192 down the screen, giving you the highest resolution
possible on the LNW80. The normal screen width of 64
characters is extended to 80 character positions in this mode.
These additional 16 character positions give you an extra 96
(16x6) pixels per line. This mode allows you to turn on or off
the smallest dots which we saw in the mode 0 character
position.
This mode can be entered in LNWBASIC by simply typing,
MODE 1
The pixel size in this mode can be seen by RUNning the
following LNWBASIC program:
l ' LNWBASIC program to light up mode 1 pixel
10 MODE 1: CLS: PCLS
20 PSET 240,96
30 CIRCLE 240,96,40
40 GOTO 40
Press the BREAK key to exit the program.
A drawing program is included in Appendix C to illustrate
some of the possibilities in this mode.
Mode 2 - Low Resolution Color
This color mode is the highest resolution mode possible for
NTSC composite video. The resolution in this mode offers you
128 pixels across the screen and 192 pixels down the screen.
To give you an idea of the size of pixel we're talking about,
the following figure shows the relationship between the mode 0
character position and the mode 2 pixel.
Figure 7.3 - Mode 0 character position with mode
2 pixel outlined.
As you can see, four vertically-stacked mode 2 pixels are
equivalent to a mode zero graphics cell.
To enter this mode in LNWBASIC, use the mode command,
MODE 2
The mode 2 pixel can be displayed on the screen using this
LNWBASIC program. Press BREAK to exit the program.
1 ' LNWBASIC program to display mode 2 pixel
10 MODE 2 : PCLS 2 : CLS
20 COLOR 5 : FLS REM FLS 'WHITES' MODE 0 SCREEN TO DISPLAY COLOR
30 PSET 63,97
40 CIRCLE 63,97,15
50 GOTO 50
To get the most of the computer's color capabilities in
this mode, examine the COLOR, FLS and PCLS commands in the
LNWBASIC manual.
Mode 3 Graphics - High Resolution Color
This high resolution graphics display mode allows the high
resolution graphics monochrome (MODE1) information to be
displayed on an RGB color monitor. This high resolution
information is displayed with limited color control. This
means that while the number of individually controllable color
dots that can be displayed is 480H (horizontal) by 192V
(vertical), the colors that they can be set to are limited to
128H by 16V color fields. These color fields have a
relationship to. the high resolution position such that one
color field controls the color of 36 high resolution pixels
(dots). Color information is provided by the MODE0 text memory
(memory from 3C00H to 3FFFH). The data stored in a given
character position will determine the color of the high
resolution graphics at that position. To better understand
this, we will run the following program in LNWBASIC:
10 MODEl:PCLS:CLS' set to high res and clear all screens
20 LINE 0,3,383,3,SET ' draw high res line
30 MODE3 ? note the line above can be drawn in mode 3 also
40 FORC=0T07 ' step through all the colors
50 FOR I=0 TO 3'PUT EACH COLOR FIELD FOUR TIMES
60 AD=&H3C00+C*4+I? COLOR FIELD ADDRESS
70 POKEAD,C*9 'must use poke to output
80 NEXT I
90 NEXTC
100 GOTO 100 'wait forever and do not disturb screen
When this program is run with a monochrome monitor
installed, a high res (MODE1) LINE is drawn across the top of
the screen, followed by characters overlapping the line on the
screen. If we install an RGB monitor to the LNW80 now, we
would see that the various characters cause the line to change
colors. This overlapping of characters with high resolution
graphics is how MODE3 graphics works. You might have noticed
that after the color bars there was a blank space (color
black) and then the rest of the line is displayed as
alternating violet and white dots. Each of these dots
represents the width of the smallest unit of color field which
is one-half of a character position. This example used an
entire character position as a color field with four
consecutive color fields set to the same color. If we wanted
to use the maximum color resolution, we could change the
program to the following:
10 MODE1:PCLS:CLS? set to high res and clear all screens
20 LINE 0,7,479,11,SET,BF ' draw a high res line
30 MODE3 ? note the line above can be drawn in mode 3 also
40 FOR I=0 TO 15
50 FORC=0T07 ' step through all the colors
60 IF(C AND l)=0THEN90ELSE70 'is the pixel even or odd?
70 AD=INT(C/2)+I*4:D=PEEK(6H3C00+AD)?ODD find address and get
data
80 D=DAND&H38:D=DORC:POKE(6H3C00+AD),D:GOT0110 'mask upr 3
bits, output
90 AD=INT(C/2)+I*4:D=PEEK(aH3C00+AD)'EVEN find address, get
data
100 D=DAND7:D=DOR(C*8):POKEfaH3C00+AD),D'mask, or data,
output
110 NEXTC
120 NEXTI
130 FOR Z=1T01000:NEXTZ
140 LINE 0,0,479,11,SET,BF
150 GOTO 150
This program draws a high res bar that extends beyond 383,
and you should have noticed on the monochrome monitor that the
characters that appear above the high res bar change the color
of the bar on the RGB color monitor. Note that characters do
not appear above the bar beyond character position 64 or high
res position 383. Run the program again and watch the
extension region while the inner region is writing the color
fields. You will see that while colors are written to the
inner region there is a duplication into the outer region. Due
to the design of the hardware, the color information for any
horizontal position past 383 is taken from color information
from the same vertical position but from an assortment of
horizontal positions (with values less than 383). This means
that. if you use high resolution graphics beyond 383, you
cannot be guaranteed the color unless all the color fields for
pixels less than 383 are set to the same color.
Mode 3 With LNWBASIC
The initial release of LNWBASIC does not totally support
MODE3 graphics. The mode command will set the LNW80 to the
correct setting, but lines drawn in MODE3 are the same as
lines drawn in MODEl with no color information provided. Later
versions of LNWBASIC (if you registered with MODULAR SOFTWARE
ASSOCIATES, you will be notified when this new version is
ready) will fully support MODE3. In order to use the high
resolution capability at this time, special subroutines must
be written to write the color fields to match the high res
graphics of LNWBASIC. The following programs provide
rudimentary routines to fill fields and do limited line
drawings in MODE3.
1 'THIS PROGRAM CONTAINS 3 MODULES. THE FIRST STARTING AT
LINE
10 WILL DRAW A SINGLE LINE FROM 0,0 TO 383,191 AND THEN USE
A COLOR FIELD TO MAKE THE LINE A GIVEN COLOR
2 ?THE SECOND MODULE (AT LINE 200) IS A DEMONSTRATION OF THE
WAY LINES CAN BE DRAWN AND MADE TO HAVE A SPECIFIED COLOR
USING MODE 3. THE ACTUAL SUBROUTINE TO DRAW THE LINE IS
LOCATED AT LINE 1000
3 ?THE THIRD MODULE IS A DEMONSTRATION OF THE ABILITY TO
CREATE BLOCKS OF COLORS. IT STARTS AT LINE 300. THE ACTUAL
ROUTINE TO CREATE BLOCKS IS FOUND AT LINE 1000. NOTE THAT
THIS THIRD MODULE DOES REQUIRE MODULE 2.
4 'IF ALL THIS SEEMS TERRIBLY CLUMSY- IT IS. THE FIRST
RELEASE
OF LNWBASIC DID NOT HAVE ANY MENTION OF MODE3 LATER
RELEASES OF LNWBASIC WILL ALLOW THE USER THE ABILITY TO
DRAW LINES' BOXES' CIRCLES' ETC IN MODE3
5 ?NOTE THAT THE PROGRAM TO DRAW LINES IS TERRIBLY
INACCURATE
10 INPUT"COLOR";C
20 INPUT"X";X:INPUT"Y";Y
30 CLS
40 PCLS
50 MODE3
60 LINE 0,0,383,191,SET
70 MODE3
80 FLS(191)
90 POKE (&H3C00+Y*64+X),C*9
100 FOR X=1 TO 64
110 Y=INT(X/4)
120 POKE (6H3C00+Y*64+X),C*9
130 NEXTX
140 GOTO 140
200 'THIS DEMONSTRATES DRAWING A MODE 3 LINE
210 FOR P=1 TO 10
220 GOSUB 510
230 GOSUB 1040
240 NEXTP
250 GOTO 250
300 'THIS DEMONSTRATES DRAWING BLOCKS OF COLORS IN MODE3
310 FOR P=1 TO 10
320 GOSUB 510
330 GOSUB 2000
340 NEXTP
350 GOT0350
510 Xl=RND(383):X2=RND(383):Yl=RND(191):Y2=RND(191):C=RND(7)
515 RETURN
1000 REM THE FOLLOWING ROUTINE DRAWS A LINE OF A SPECIFIED
COLOR IN MODE3
1010 INPUT"DESIRED COLOR";C
1020 INPUT"Xl,Yl";Xl,Yl
1030 INPUT"X2,Y2";X2,Y2
1040 MODE1
1050 CLS:PCLS:LINE Xl,Yl,X2,Y2,SET
1055 GOSUB 1060
1056 GOTO 1075
1060
Xl=INT(X1/6+.5):X2=INT(X2/6+.5):Yl=INT(Yl/12+.5):Y2=INT(Y2/12
+.5)
1070 IF
Xl>63THENX1=63ELSE:IFX2>63THENX2=63ELSE:IFYl>15THENY1=15ELSE:
IFY2>15THENY2=15
1072 RETURN
1075 IF100*Xl+Yl>100*X2+Y2 THEN T=Xl:Xl=X2:X2=T:T=Yl:Yl=Y2:
Y2=T
1080 IF Xl=X2THENGOT01090ELSEGOT01100
1090 MODE3:FORY=YlTO Y2:POKESH3C00+Y"64+Xl,C*9:NEXTY:GOT01210
1100 M=(Y2-Yl)/(X2-Xl)
1110 B=Yl-M*Xl
1120 MODE3
1125 IFM>0
THENIFM<=1THEN1130ELSE1300
ELSEIFM>=-1THEN1130ELSE1350
1130 FORX=X1TOX2-1
1140 Y=INT((M*X+B)+.5)
1145 GOSUB1150
1146 NEXTX:RETURN
1150 Z=&H3C00+Y*64+X:IFZ<&H3C00ORZ>6tH3FFFTHENGOT01210
1160 POKE Z,C*9
1165 IF(X-2)>=0THENPOKE(&H3C00+Y*64+X-l),C*9 ELSEGOT01170
1170 IF(X-l)>0THEN POKE(&H3C00+Y*64+X-1),C*9 ELSEGOT01180
1180 IF(X+1)<65THENPOKE(&H3C00+Y*64+X+l),C*9 ELSEGOT01190
1190 IF(X+2)<64THENPOKE(&H3C00+Y*64+X+2),C*9 ELSE GOT01200
1200 RETURN
1210 RETURN
1220 Xl=0:Y1=0:X2=63:Y2=15
1230 MODE1
1240 LINE 0,0,377,179,SET
1250 MODE3
1260 GOTO 1100
1300 FORY=Y1TOY2'SLOPE BETWEEN -1 AND 1
1310 X=INT((Y-B)/M+.5)
1320 GOSUB 1150
1330 NEXTY
1340 RETURN
1350 T=Y1:Yl=Y2:Y2=T? SLOPE BETWEEN -1 AND -INFINITY
1360 GOT01300
2000 IFXl=X2THEN1050ELSEIFYl=Y2THENGOT01050
2010 LINE Xl,Y1,X2,Y2,SET,B
2020 M0DE3
2030 GOSUB 1060
2040 IFY1<Y2THEN2060
2050 T=Y1:Yl=Y2:Y2=T
2060 IFXl<X2THEN2080
2070 T=X2:X2=X1:X1=T
2080 IFY1=0THENY1=1ELSE:IFX1=0THENX1=1
2090
FORY=Y1-1T0Y2:FORX=X1-1TOX2:POKE&H3C00+Y*64+X,C*9:NEXTX:NEXTY
2100 RETURN
High Resolution Graphics for Non-Disk Owners
The program listed below sets up tables in memory which
hold information on the coordinates of points to be SET, RESET
or POINTed. (The machine-language program encoded in the DATA
statements is listed at the end of this section).
0 REM This program POKES 2 tables into memory. The first one
1 REM generates 2 bytes for each horizontal coordinate (X).
2 REM This two byte pair consists of (a) the character
3 REM position (0-79) and (b) the one of six pattern
4 REM selecting the pixel within the character position.
5 REM The second table gives the vertical coordinate. It
6 REM consists of 192 locations each of which holds the
7 REM row (D4-7) and the line (D0-3).The tables start at
8 REM 30000.
10 X=30000
20 FOR Y=0 TO 79
30 GOSUB 100
40 NEXT Y
50 X=31024
55 FOR L=0 TO 15
60 FOR R=0 TO 11
65 N=(16*R)+L
70 POKE X,N
75 X=X+1
80 NEXT R
85 NEXT L
90 GOTO 171
100 N=l
101 FOR Z=0 TO 5
120 POKE X,Y
130 X=X+1
140 POKE X,N
150 X=X+1
155 N=N*2
160 NEXT Z
165 RETURN
166 REM This routine POKES the machine-language USR program
168 REM (encoded in the DATA statements) into RAM from
167 REM location 79F0H (31216) to 7A90H (31376)
169 REM (31376).
171 FOR X=31216 TO 31376
172 READ Y
173 POKE K,Y
174 NEXT X
175 REM The POKE command at line 200 gives the entry point of
177 REM the one USR call. The low order byte must be changed
179 REM to point to one of the other routines if desired:
185 REM To select SET,RESET,POINT use the following values:
187 REM SET - POKE 16526,240:POKE 16527,121
189 REM RESET - POKE 16526,243:POKE 16527,121
191 REM POINT - POKE 16526,246:POKE 16527,I21
182 REM Remember that these address locations are decimal.
193 REM Once you have POKEd these values out, you need only
195 REM POKE the LOW ORDER BYTE to change to a different
197 REM routine (e.g. POKE 16526,246 gives POINT).
199 REM
200 POKE 16526,240:POKE 16527,121 ' SET Routine
210 CLS ?Clears LORES screen
220 OUT 254,2 'Turns HIRES (Mode 1) on
230 FOR X=0 TO 479 'Bumps through all X
240 FOR Y=0 TO 191 'Bumps through all Y
250 POKE 31257,Y ?POKES Y value to 31257 (in USR)
260 A=USR(X) 'X is passed to USR routine
270 NEXT Y
280 NEXT X
290 END
300 DATA 195,67,122,195,88,122,195,113,122,205,127,10
310 DATA 1,48,117,4lg9,126,254,64,242,35,122,205,19,122
320 DATA 203,60,203,29,203,60,203,29,201,35,70,33,48,121
330 DATA 17,0,0,25,102,111,203,37,203,37,201,205,19,122
340 DATA 203,37,203,37,203,4,203,4,203,60,203,29,203,60
350 DATA 203,29,203,60,203,29,203,60,203,29,124,198,48
360 DATA 103,20l,205,249,121,219,254,246,8,211,254,126
370 DATA l76,ll9,219,254,230,247,211,254,195,154,10,205
380 DATA 249,121,219,254,246,8,211,254,120,238,255,71
390 DATA 126,160,119,219,254,230,247,211,254,195,154,10
400 DATA 205,249,121,219,254,246,8,211,254,126,160,194,133
410 DATA 122,33,0,0,195,l36,l22,33,1,0,219,254,230,247
420 DATA 211,254,195,154,10
Color Graphics for Non-Disk Owners
The following listing demonstrates how to generate colors
on the LNW80 without using LNWBASIC.
10 REM COLOR BAR TEST PROGRAM
20 REM CASSETTE (16K) VERSION
30 REM This test should generate the following colors:
35 REM White Green Yellow Red Magenta Blue Blue-Green Black
36 CLS:PRINTCHR$(23)
40 PRINT "LNW RESEARCH COLOR BAR TEST"
45 REM Delay before starting test
50 FOR Z=0 TO 1000
60 NEXT Z
70 OUT 254,4
72 FOR X=15360 TO 16383
74 POKE X,255
76 NEXT X
80 FOR X=32512 TO 32533
90 READ D
100 POKE X,D
110 NEXT X
120 POKE 16526,0:POKE 16527,127
125 FOR X=0 TO 12288
130 FOR Y=0 TO 7
135 FOR Z=0 TO 7
150 POKE 32522,Y*9
180 A=USR(X)
190 LET X=X+1
200 NEXT Z
210 NEXT Y
220 LET X=X-1
230 NEXT X
240 END
270 DATA 205,127,l0,219,254,246,8,211,254,54,0,0,110,38,0
280 DATA 230,247,211,254,195,154,10
GRAPHICS FOR MACHINE-LANGUAGE PROGRAMMERS
Machine-Language Overview
The four different graphics modes are selected by I/0 port
254 (FE Hex). The definition of port 254 is shown
schematically in Figure 7.4.
Figure 7.4 - 8 bit address of port 254 showing
bit definition.
Data bit 0 controls inverse video operation in modes 0 and
1 only. Data bits 1 and 2 together give mode control, as can
be seen from Table 7.1.
Table 7.1 - Mode Control Using Port 254
D2 D1 | Mode |
0 0 |
0 |
Data bit 3 controls graphics RAM enable. Data bits 4 to 7
are reserved and should not be used.
When modifying port 254, first read the port and then
change only the bits that you want to change. As an example,
consider the following LNWBASIC program (any level of BASIC
will do) which sets data bit 0 of port 254, thus changing over
to inverse video.
1 ?PROGRAM TO SET DATA BIT 0 OF PORT 254
10 A=IMP(254)
20 A=1 OR A
30 OUT 254,A
To return to normal white on black, substitute 0 for 1 in line
20.
Mode 0 Adressing
Video display memory for this mode runs from 15360 (3C00
Hex) to 16383 (3FFF HEX) . A two-byte address is used to point
to a location in video RAM. The relationship between the
memory location and the visibly displayed character is defined
by the following address chart:
Figure 7.5 - Mode 0 addressing as in p. 64 of
original LNW manual.
The least significant (rightmost) 6 bits, bits 0 to 5, of the
address specify the character position. With all 6 bits on for
example, character position 63 would be specified. Bits 6 to 9
inclusive store the binary code for the line (0 - 15) on which
the character posit.3.on is found.
Take, for example, address 3C97. Filling the address chart
we get:
Figure 7.6 - Mode 0 address chart with 3C97
displayed.
This translates to line 2, character position 23, as shown
in Figure 7.7.
Figure 7.7 - Screen with character 23, line 3
highlighted.
We have seen how screen positions are addressed and how
both graphics characters and text characters are constituted.
But how does the computer know whether a graphics character or
a text character is to be displayed? The answer is encoded in
the data byte to be displayed. When data bit 7 of the data
byte is on, bits 0 to 5 select all possible combinations of
graphics characters. With data bit 7 off, bits 0 to 5 are
together interpreted as an ASCII text code. See figure 7.8.
Figure 7.8 - Data byte, 8 bits, bit 7 on/off -
graphics/text respectfully. Bit 6
not used, bits 0 to 5 store code.
Note that graphics RAM is not used in this mode.
Accessing Graphics RAM
Graphics modes I, 2 and 3 make use of graphics RAM. The
graphics RAM, running from address 0 to 3FFF (hex), is located
in the lower 16K of LNW80 address space. This is also where
the the Level II ROMs, keyboard, mode 0 video RAM, and
miscellaneous I/0 is mapped.
I/0 port 254, data bit 3 (D3), selects which block of
memory is enabled in the lower 16K. With D3 on (1), the
graphics memory is enabled. With D3 off (0), the keyboard,
video RAM, 12K ROM and anything else which might be mapped in
the lower 16K of address space are enabled. Figure 7.9
illustrates this bank switching operation.
Figure 7.9 - Memory bank switching diagram
Since the Level II ROMs are also disabled when D3 is on,
using the out command in BASIC to turn this bit on will cause
a system "crash." This is because the computer will be
operating out of graphics RAM instead of ROM. The implication
of this is that D3 can only be accessed by a machine-language
program (or USR call from BASIC). Note that while the graphics
RAM is enabled, the lower 16K is inaccessible.
Mode 1 Addressing
The high resolution graphics RAM is located between 0 and
3FFF (hex). The 16K x 6 bits of graphics memory allows
individual control of 480 x 192 dots. The addressing is not
simple X,Y addressing, but is optimized for rapid character
generation, In this scheme of things, the video memory map is
broken into two fegiona: an inner region comprised of 384 x
192 dots, and an extension region comprised of 96 x 192 dots.
Figure 7.10 shows this screen breakdown.
Figure 7.10 - Screen inner and extension regions.
The 384 x 192 inner region runs from address 0 to 2FFF
(hex). The address chart for the inner region is as follows:
Figure 7.11 - Inner region address chart.
The 96 x 192 extension region is addressed from 3000 to
3FFF (hex). The address chart for the inner region is given
below. In this case, the row field has been divided in two:
bits 10 and 11 holding the two least significant bits (LSB),
and bits 4 and 5 holding the two most significant bits (MSB).
This was done for hardware implementation reasons only.
Figure 7.12 - Extension region addressing.
We said that the addressing was not simple X,Y addressing.
So what does that mean? An example will help to illustrate the
situation.
Take address 2000H. Going to the address chart and filling
in 2000H, we get:
Figure 7.13 - Address chart with 2000H, and
character position, line & row,
marked.
This takes us to row 8 of line 0, character position 0.
This is a bit unexpected, as we have been used to the idea of
starting at the top left hand corner of the screen and then
addressing all points down the screen, in a contiguous
fashion. If we start with address 0 and sequentially move
through to address 2FFF, examining the positions pointed to on
the screen by each address, we will see that row 0 of all
character positions is addressed first, then row 1 of all
character positions, then row 2... and so on. The same holds
for the extension region. (Try a few examples).
The information telling us which pixels are on in a
particular row, comes from the 6 bit-datum byte located in
graphics RAM:
Figure 7.14 - Graphics Data Byte in LSB (0-2)
and MSB (3-5) Format
Each bit in the byte corresponds to one of the pixels in
the row, pointed to by the address we just deciphered.
Mode 2 Addressing
The mode 2 pixel differs from the mode l pixel in that it
is 3 times larger, being composed of 3 horizontal dots, The
loss of resolution is compensated for by way of color
information for each pixel. Mode 2 addressing is similar to
mode 1 inner region addressing (see Fig. 7.15). In this case
however, the data byte holds information for two adjacent
color pixels, each half of the byte containing three bits
specifying one of 8 colors.
Figure 7.15- Mode 0 character position w/mode 2
pixel outlined, and data byte
underneath.
Bits 3, 4 and 5 contain color information for the pixels on
the left hand aide of the character position. Bits 0, 1 and 2
contain color information for the right-hand side of the
character position. The codes for the 8 colors available are
as follows:
Table 7.2 - Color coding for mode 2 pixels.
| Data | Color |
| 000 | White |
| 001 | Green |
| 010 | Yellow |
| 011 | Red |
| 100 | Magenta |
| 101 | Blue |
| 110 | Blue/Green |
| 111 | Black |
Mode 3 Addressing
A simple relationship exists between the high resolution
video and the mode 3 color fields. This relationship is due to
the fact that the low res text memory and the high res memory
share the same addressing in the hardware. The inner region
addressing and the low res addressing are compared below:
Figure 7.16
It should be noted that the character position of the MODE3
color field addressing is divided into two color fields. When
a byte is written to 3C00H to 3FFFH, two color fields are set
as illustrated below:
Figure 7.17 Mode 3 Character Position With Color Fields
WITH COLORS DEFINED AS:
5 4 3 or
2 1 0
----------
0 0 0 0 white
0 0 1 1 green
0 1 0 2 yellow
0 1 1 3 red
1 0 0 4 magenta
1 0 1 5 blue
1 1 0 6 blue-green
1 1 1 7 black
The second LNWBASIC program in this section illustrates how
MODE 3 graphics is done from BASIC. Once this is clearly
understood, machine-language use should be simple. When using
MODE 3 to draw lines, circles, etc., setting the correct color
field can be easily done at the same time that the
machine-language routine is outputting to the high res screen.
If the high res address has been computed or looked-up via
some form of address computation table, this address needs
only to have the most significant 6 bits masked and set as
follows:
A15=0
A14=0
A13=1
A12=1
All=1
A10=1
The only additional consideration is which color field is to
be written at that character position? Is it color field A or
B? The software that writes the high res information must have
some method of knowing which high res data bit was the one
that was being written to. If the data bit(s) of the high res
memory was 0, 1 or 2 (the leftmost 3 dots on the screen) then
the color field to be written to is color field A. If the data
bit(s) of high res are 3, 4 or 5 (the right three bits) then
the appropriate color field is B. In order to write only the
desired color field, the program must first read the entire
byte (both color fields) with masking and ORing to put the
3-bit color information in the right place without disturbing
the other color field. Refer to the LNWBASIC program in the
above section for the conceptual details.
Remember that when the high res video memory is enabled via
port 254 data bit 3, the low res video memory 3C00 to 3FFFH is
not accessible. This means that before writing the color field
you must turn off the graphics enable as follows:
IN A,(0FEH) ; INPUT FROM 254
AND 0F7H ; TURN OFF GRAPHICS RAM
OUT (0FEH),A ; OUTPUT TO 254
Then the graphics mode must again be turned on before
writing more graphics.
Machine-language Routine to SET, RESET, POINT
The following is the machine-language listing to SET, RESET
or POINT a video RAM location. This is the listing for the
machine-language that was encoded in the DATA statements in
the program listed under the subsection entitled "Graphics for
Non-Disk Owners."
79F0 00100 ORG 79F0H
79F0 C3437A 00101 SET JP SETR ;SET ROUTINE ENTRY
79F3 C3587A 00102 RESET JP RESR ;RESET ENTRY
79F6 C3717A 00103 POINT JP POIR ;POINT ROUTINE
79F9 CD7F0A 00110 ADCAL CALL INPX GET X POSITION IN
HL PAIR
79FC 013075 00120 LD BC,7530H ;START OF
HORIZONTAL
TBL
79FF 29 00125 ADD HL,HL ;DOUBLE HL IN TABLE
7A00 09 00130 ADD HL,BC ;POINT TO
CHARACTER POS. IN TBL
7A01 7E 00140 LD A,(HL) ;INPUT CHARACTER
POSITION
7A02 FE40 00150 CP 64 ;IS > THAN CHAR 64
(IN EXTENSION)
7A04 F2237A 00160 JP P,EXTEND ;YES USE
EXT. ALGORlTHM
7A07 CD137A 00170 CALL VERT ;GET
ROW.LINE,CHARACTER
ADJUSTED
7A0A CB3C 00180 SRL H ;SHIFT LSB OF H
INTO
CARRY
7A0C CB1D 00190 RR L ;GET LSB OF H INTO
MSB OF L REG
7A0E CB3C 00200 SRL H ;SHFT LSB OF H INTO
MSB OF L
7A10 CB1D 00210 RR L ;ONCE AGAIN
7A12 C9 00220 RET ;NOW HL HAS ADDRESS
OF GRAPHICS
7A13 23 00240 VERT INC HL ;THlS PUTS ROW.LINE
INTO H AND
00245 ;PUTS CHARACTER
POSITION SHIFTED
00247 ;LEFT TWO BITS INTO
L WITH THE
00249 ;TWO LSB SET TO
ZERO
7A14 46 00250 LD B,(HL) ;NOW B REG HAS ONE
OF SIX PATERN
7A15 213079 00260 LD HL,7930H ;START OF VERTICAL
LOOKUP TABLE
7A18 110000 00265 LD DE,0H ;POKE DATA HERE
7A1B 19 00270 ADD HL,DE ;POINT TO VALUE IN
TABLE
7A1C 66 00280 LD H,(HL) ;PUT ROW.LINE INTO
H
7AlD 6F 00290 LD L,A ;COPY CHARACTER
POSITION TO L
7A1E CB25 00300 SLA L ;SHIFT LEFT ONE
PLACE
7A20 CB25 00310 SLA L ;NOW L HAS LEFT
JUSTIFIED CHAR
7A22 C9 00320 RET
7A23 CD137A 00330 EXTEND CALL VERT ;GET VERT IN H,CHAR
IN L,DAT IN B
7A26 CB25 00340 SLA L ;ROTATE 2 MSB OF
ROW
AND
7A28 CB25 00350 SLA L ;PUT THEM IN THE 2
LSB OF H
7A2A CB04 00360 RLC H
7A2C CB04 00370 RLC H
7A2E CB3C 00375 SBL H ;NOW SHIFT HL RIGHT
4 PLACES
7A30 CB1D 00380 RR L
7A32 CB3C 00398 SRL H
7A34 CB1D 00400 RR L
7A36 CB3C 00410 SRL H
7A38 CB1D 00420 RR L
7A3A CB3C 00430 SRL H
7A3C CB10 00440 RR L ;HL OK NOW
7A3R 7C 00445 LD A,H
7A3F C630 00447 ADD A,30H ;MAKE ADDRESS
ABOVE ROW 11
7A41 67 00449 LD H,A
7A42 C9 00460 RET
7A43 CDF979 00478 SETR CALL ADCAL
7A46 DBFE 00480 IN A,(0FEH) ;INPUT FROM 254
7A48 F688 08498 OR 8 ;TURN ON
GRAPHICS
RAM ENABLE BIT
7A4A D3PE 00500 OUT (0FEH),A ;OUTPUT TO 254
7A4C 7E 00510 LD A,(HL) OLD DATA IN A
REG
7A4D BS 80520 OR B ;SET BIT
7A4E 77 00530 LD (HL),A ;WRITE DATA BACK
OUT
7A4F DBFE 00540 IN A,(0FEH) ;INPU AGAIN
7A51 E6F7 00550 AND 0F7H ;TURN OF
GRAPHICS
RAM
7A53 D3FE 00560 OUT (0FEH),A ;OUTPUT PORT 254
7A55 C39A0A 00570 JP RETURN
7A58 CDF979 00580 RKSR CALL ADCAL
7A58 DBFE 00590 IN A,(0FEH) ;INPUT PORT 254
7A5D F608 00600 OR 8 ;SET GRAPHICS
RAM
ENABLE BIT
7A5F D3FE 00610 OUT (0FEH),A ;OUTPUT TO PORT
254
7A61 78 00620 LD A,B
7A62 EEFF 00630 XOR 0FFH ;COMPLEMENT A
7A64 47 00640 LD B,A
7A65 7E 00650 LD A,(HL)
7A66 A0 00660 AND B
7A67 77 00670 LD (HL),A ;WRITE DATA BACK
OUT
7A68 DBFZ 00688 IN A,(0FEH) ;INPUT AGAIN
7A6A EGF7 00690 AND 0F7H ;TURN OFF
GRAPHICS RAM
7A6C D3FE 00700 OUT (0FEH) ,A
7A6E C39A0A 00710 JP RETURN
7A71 CDF979 00720 POIR CALL ADCAL
7A74 DBPR 00730 IN A,(0FEH)
7A76 F608 08748 OR 8
7A78 D3FE 00750 OUT (0FEH),A
7A7A 7E 00760 LD A,(HL) ;GET SIX BITS OF
DATA
7A7B A0 00770 AND 8 ;MASK ALL BUT
SELECTED BIT
7A7C C2857A 00780 JP NZ,SETHL ;MAKE L=l IF NOT
ZERO
7A7F 210000 00790 LD HL,0H ;MAKE BL PAIR 0
7A82 C3887A 00800 JP QUIT ;EXIT
7A85 210100 00810 SETHL LD HL,1H ;SET HL=00018
7A88 DBFE 00812 QUIT IN A,(0FEH) ;INPUT PORT
7A8A E6F7 00814 AND 0F7H ;TURN OFF
GRAPHICS RAM
BIT
7A8C D3FE 00816 OUT (0FEH),A ;0UTPUT TO PORT
254
7A8E C39A0A 00820 JP RETURN
0A9A 00838 RETURN EQU 0A9AH
0A7P 00840 INPX EQU 0A7FH ;THIS PUTS
VARIABLE INTO
HL
0000 00850 END
00000 TOTAL ERRORS
Next page | TOC