Subject: mac68k console improvements
To: NetBSD-bugs <netbsd-bugs@NetBSD.ORG>
From: None <M.Hitter@trier.fh-rpl.de>
List: netbsd-bugs
Date: 04/16/1996 02:12:05
Hello,

I did some improvements to the mac (LCII) console as reported in the
ports-mac68k list. My Internet connection is only of dial-in-type, so
I'll be probably never able to use 'send-pr', AFAIK.I hope this is the
best direction to make the stuff possibly part of the common sources, if
not, please tell me the right one.

Below is the (uuencoded) patch kit (2 diffs, 2 new files, 1 link),
here's the description what I did:

(all files in /usr/src/sys/arch/mac68k/)
dev/adb.c (diff to March 1996 source included)
 - removed double declaration of keytab[][]. Other d. in
include/keyboard.h.


include/keyboard* (included complete files/link):
 - new files for different keyboard-mappings with a link to the current
one. The new files are a superset of the ols keyboard.h file, added some
comments and two columns to allow the use of the options and
shift+options modifier keys as needed for roman international keyboards.
Supported german and us keyboards for now.

dev/ite.c (diff included):
 - some ints replaced by shorts for smaller code and faster calculation.
MacOS uses also shorts for these variables which will probably never
exceed 1600.

 - replaced code for the scrollup(), scrolldown() and clear_screen()
routine with ~12 times faster code. The former code copied whole lines
in video memory which are of size 1024 bytes, even in 1-bit mode.
Visible are only 640/8 = 80 bytes. The new code copies only the visible
part which is much faster on the LCII console. Other machines might
handle video memory another way but the new code will never be slower
than the old one.

 - renamed scrrows to scrlines for more clarity. All names *row* now
handle scan lines, names *line* handle text lines (= 10 scan lines).

 - removed some commented-out code

 - ite_read(), ite_write(): removed some unreachable code.

 - ite_intr(): added code to make the console recognize the options
modifier key. ADB code did already support this key. This requires the
new keyboard.h.* files. Support for international characters is now only
the question of an international font. Maybe I'll add this soon.

 - cninit(): added central, one time calculation of two variables needed
in the scrolling code.

OK, thats it.

If you think this patch is too big or want me to do something else, feel
free to tell me that.

Markus

-----------------------------------------------------------------------
  Markus Hitter             Voice: ++49/651/828172
                            Email: hitterm@trier.fh-rpl.de
  Trier (Germany)           WWW: http://www.trier.fh-rpl.de/~hitterm


begin 644 markuspatches.tar.gz
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
L+=7QL"\6A$MU&/8E<IV70N2&$$(((8000@@AA!!"""'L)OP%E*:N+@"@``#@
`
end