America Online
APPLE II DEVELOPMENT FORUM CONFERENCE LOG
Tuesday, July 3, 1990 10:00 p.m. eastern time
Topic: Network and Communication Programming
Forum Leader: Gary Jacobson (AFA Gary J)
A2Evanglst Coach..... I am trying to open a second window with controls in a
cdev... any
A2Evanglst Ideas??
Coach101 Whew... Hmm.... That could get tricky....
A2Evanglst I know <grin>
Coach101 First, I think you are going to have to give up on letting the
user do anything but stay in the
Coach101 window until you close it. That is, intercept all events and if
they don't apply to the window
Coach101 you just opened, ignore them, issue a <boing> or whatever, but you
cannot act on them...
Coach101 The situation is akin to having an NDA "spawn" a new window and
that is presently fairly unsolvable..
Coach101 ga
A2Evanglst Hmmmm... Basically I have run out of room on my main window and
I have some
A2Evanglst controls that I need to have the user access
A2Evanglst so... I thought that another window would do the trick...
but.....
A2Evanglst we (my programmer and I) are finding out that it is very hard to
do
Coach101 I had that problem and used a pop-up control to let the user
select which set of fields they were going
Coach101 to work with. That may work for you...
AFA Gary J Ok, let's get started officially.
AFA Gary J Welcome to the Apple II Development Forum. Tonight's topic
is...
AFA Gary J Network and Communication programming.
AFA Gary J Let's use protocol so we can keep track of what's being said,
beginning NOW...
AFA Gary J so if you have a question, type a "?" on a line by itself, or if
you have a
AFA Gary J comment on the current topic, type a "!" on a line by itself.
AFA Gary J Ok, let's open the floor to questions.
AFA Gary J GA, Jeffrey
JeffreyH11 Is there any EASY way to access the GS serial ports from within a
16-bit
JeffreyH11 program (assembly or otherwise)? The Text Tools just don't cut it
for
JeffreyH11 making the control calls. GA
AFA Gary J GA, Matt
AFA Gary J (Jim Luther has lots of info on this, I know)
Matt DTS There's a better way than text tools - the OS.
Matt DTS "But wait - you can't set the baud rate from GS/OS." Yes, you
can, and here's how.
Matt DTS You use DInfo to go looking for drivers. You're interested in
drivers that have a device ID of
Matt DTS "printer port" or "modem port" and their characteristics word has
the "generated driver" bit
Matt DTS set.
Matt DTS If you find such a driver, you can send firmware commands to it as
part of the data stream. You only
Matt DTS run into trouble if you have to "zap" so no commands can be set.
Matt DTS GA.
JeffreyH11 If I do "Zap," how can I recover? And how can I do things like
check DCD or
JeffreyH11 set the state of DTR? GA
AFA Gary J Hi Jim!
AFA Gary J GA, Jim
Jump Long You can use the firmware's extended interface to manipulate those
signals
Jump Long after using Zap on the IIGS.
Jump Long Oh yeah, you can turn off Zap with the SetModeBits command.
Jump Long just zero out bit 23.
Jump Long ga
JeffreyH11 I know how the firmware works; I've used it with no problem from
8-bit
JeffreyH11 programs, but it's a pain in the neck from a 16-bit program. GA
Jump Long You need a GS/OS loaded driver, right?
Jump Long (for the serial ports)
Coach101 Sounds like your cue Jim :)
JeffreyH11 I don't know that there is one.
Jump Long There isn't.
Jump Long Would it help if you you had one?
AFA Gary J :)
JeffreyH11 Hence my problem. Why, do you know where there is one?
Jump Long Nope. We need to write one when we find time.
JeffreyH11 It would be a useful thing to have around.
Matt DTS We need to find time. If you want one write to DTS and say so.
We won't respond but we'll pass it
Matt DTS along to engineering.
Matt DTS (that means ALL of you)
AFA Gary J Is this kind of like voting? :)
Jump Long If there's a demand, then it will probably happen.
Matt DTS Apple does what it believes the customers want. :)
JeffreyH11 I want one. (is that good enough, or would a letter be better?)
:)
Matt DTS A letter would be MUCH better.
AFA Gary J (Let's stuff the ballet box :)
Matt DTS We can pile letters on people's desks and say "See?"
Jump Long A letter can be passed along... physical proof :)
Matt DTS Change your handwriting - send more than one letter.
JeffreyH11 :)
Matt DTS Vote early and vote often.
Matt DTS (getting too silly - GA)
Jump Long Tell us what features you think a serial port driver should have
(i.e., what
Jump Long should you be able to control.)
JeffreyH11 What's the address? (Can it be sent AOL, or is US mail
preferable?)
AFA Gary J US Mail
Jump Long Apple II Developer Technical Support
Jump Long Apple Computer, Inc.
Jump Long 20525 Mariani Ave., MS: 75-3T
Jump Long Cupertino, CA 95014
AFA Gary J Any further questions, Jeffrey? (Thanks, Jim :)
JeffreyH11 No; that about covers it. GA
AFA Gary J Ok, I see Coach has the next question.. GA, Coach
Coach101 I know that the physical speed of AppleTalk is in the 250k bps
range. Have any tests been done
Coach101 to determine what effective speed a IIgs can get with its
AppleTalk SendDatagram interface? ga
AFA Gary J GA, Jim
Jump Long It really depends on how much processing you're doing while the
AppleTalk
Jump Long packets are coming in. DDP doesn't have much overhead, but what
your appli-
Jump Long cation does with the data will affect how fast you can take it
from AppleTalk.
Jump Long I havne't done any benchmarks, though, if that's what you're
getting at. :)
Jump Long GA
Coach101 I was just wondering what the speed would be with a program that
just dumped the data in the bit
Coach101 bucket. From that one would have an upper limit on speed for any
protocol/application... ga
Jump Long We'd have to see how much overhead is added by the interrupt
handling chain
Jump Long to really know that. GA
AFA Gary J Anything else, Coach?
Coach101 Not for now.... I have found that the manual answers almost all
of my questions... ga
Jump Long Good, that's what we like to here :)
Jump Long hear
Coach101 Of course, it, the manual, could stand improvement :)
Jump Long ahhhh
Matt DTS Yeah, so could your tact. Big deal.
Matt DTS :)
Coach101 touche
AFA Gary J Ok, while we're waiting for more of your questions to come
rolling in :),
AFA Gary J could we get the Apple DTS folks to outline some of the resources
(i.e.
AFA Gary J technotes, etc.) that deal with telecommunication programming?
Matt DTS Sure. Go ahead, Jim.
AFA Gary J :)
Jump Long IIGS #18 & #30
Jump Long IIGS #18 covers the SCC from a low-level (firmware) programmer's
view.
Jump Long IIGS #30 was just revised to add more details about the Apple
IIGS's serial
Jump Long hardware.
AFA Gary J Thanks, Jim.
Jump Long From what I've seen (a quick galnce over the source code), John
Snow's
Jump Long SERIO routines look like they should work OK for accessing the
serial firmware
JeffreyH11 Are they in the library?
Jump Long from the 16-bit world, but I can tell you now that they will
probably be
Jump Long broken by almost any loaded serial driver that's written (either
that or they
Jump Long will break the loaded driver), so it's hard to really recommend
them whole-
Jump Long heartedly.
Jump Long Yes, they are in the library.
Jump Long SERIO.ACU I believe.
AFA Gary J Yes.
AFA Gary J GA, Jeffrey
JeffreyH11 If somebody writes a loaded serial driver, we won't need John
Snow's
JeffreyH11 routines anymore. GA
Jump Long Right. In fact, a loaded driver would be able to transfer data to
your application at much higher rates than the firmware could ever
do.
AFA Gary J Since we don't really have people pounding down the walls with
Telecom/Network
AFA Gary J questions this evening, let's open up the topic to whatever
programming
AFA Gary J questions you might have (right after Jeffrey's comment :) GA,
Jeffrey
JeffreyH11 So the moral of the story is, check for a loaded driver and use it
if it
JeffreyH11 is there, instead of using the firmware or SERIO or a similar
library. GA3
AFA Gary J GA Jim
Jump Long I was just going to say YES, Use the driver. GA
JeffreyH11 (Did I ask a question - I didn't know that!) :)
Jump Long (we're just confirming your statement's truth :)
AFA Gary J Back to you, Coach :) Do you have something to add?
Coach101 I was going to follow up on the documentation for using the IIgs
for communications and networking.
Coach101 If you are planning to do any work with AppleTalk, there are a
couple of technotes you should read
Coach101 but only after having read the "AppleShare Programmer's Guide for
the Apple II" and having
Coach101 a copy of "Inside AppleTalk" around. ga
Jump Long (there's 7 AppleTalk Tech Notes)
Coach101 Oops, change "couple" to "seven"
Coach101 :)
AFA Gary J Just make it a "few" :)
Jump Long Jeffrey, feel free to send me your views of what a serial driver
should have
Jump Long in it. You can EMail it to me here.
AFL Marty What are the requirements for becoming an Apple Associate?
AFL Marty (Other than paying your money, that is.)
Matt DTS If you want more information, call (408) 974-4897. Either that or
I can make something up.
AFL Marty I was just looking for general information.
Jump Long Marty, I'd read the program sheet to you, but it's 5 miles away at
work -- I
Jump Long can't see that far :)
AFL Marty Ah. Thanks anyhow.
JeffreyH11 OK. Is there any way to tell exactly what keys are down on the
IIgs (i.e., if
JeffreyH11 the A and K keys are down, how can I tell that?). GA
Matt DTS Jeffrey, the IIgs does not have n-key rollover. You can't tell if
more than one key is down.
Dave Lyons (Besides looking at the keyboard, JH? :-)
Dave Lyons (Don't think it can be done programmatically.)
JeffreyH11 Is it possible to get the ADB microcontroller to tell you about
key presses
JeffreyH11 and releases but still process them?
Jump Long ADB is serial, so it only sees one key (with modifiers) at a
time.
Coach101 Is the serialization done in the keyboard or in the ADB chip in
the IIgs?
Jump Long at the keyboard
JeffreyH11 OK. I was under the impression that the keyboard sent a message
to the ADB
JeffreyH11 chip each time a key (modifier or otherwise) was pressed or
released.
Jump Long and at the chip
Jump Long It's two-way communication.
Dave Lyons I think ADB would be perfectly happy to tell you all the keys that
go down, as they go down, but
Dave Lyons Apple's keyboards don't scan for new keypresses when 2 keys are
already down.
JeffreyH11 I assume that holds only for non-modifier keys?
Dave Lyons JH, probably--I think the ADB controller knows about the modifiers
all the time, even though the
Dave Lyons modifiers register often has an outdated copy, *on purpose* (it
tells you the modifiers that go with
Dave Lyons the keypress you're trying to read, at least if keyboard buffering
is on).
JeffreyH11 I wrote a program to monitor the ADB chip RAM and noticed a
register that
JeffreyH11 always reflects the currect state of the modifiers, and another in
which a
JeffreyH11 bit changes to indicate the state of the RESET key.
JeffreyH11 Is there any way to examine the contents of the keyboard buffer
without
JeffreyH11 emptying it (i.e. an INIT checking for a specific key without
disturbing
JeffreyH11 others that do the same thing).
Dave Lyons JH, nope, no supported way (it's gotta be in the ADB controller
RAM, but we don't guarantee
Dave Lyons what's in there). I don't know whether you can look at all the
keys as they're pressed using
Dave Lyons an ADB completion routine or not--I'm not an ADB expert.
JeffreyH11 Finally, (and this is the biggie), is there any info on what's in
the ADB
JeffreyH11 RAM? (at least what's currently there, even if it's not
guaranteed)
Dave Lyons Sounds like you have more info than I do, from playing with it
(you've played with it more than
Dave Lyons I have).
AFA Gary J I suspect that if there was, Apple wouldn't admit it for fear
someone would
AFA Gary J write something that tried to adhere to it.
AFA Gary J :)
AFA Gary J (For good reasons)
JeffreyH11 There's already plenty of incompatibilities between ROM 2 and 3
IIgs's, why
JeffreyH11 not one more?
Dave Lyons (BTW, I believe a lot of it *is* different between the "ROM 1" and
"ROM 3" motherboards.)
Coach101 If you just want to sneak a peek, at the characters, can't you do
something along the lines
Coach101 that GSBug does (presuming GsBug's trick is supported) ?
Dave Lyons (No such thing as ROM 2! It's ROM 1 and ROM 3.)
JeffreyH11 What does GSBug do? (never even heard of it).
Dave Lyons What does GSBug do?
AFA Gary J GSBug is great! A debugger for the IIGS.
JeffreyH11 Where is it available? How much??
AFA Gary J APDA...
AFA Gary J $30.00
AFA Gary J GSBug (INIT version) resides in memory all the time. At any time
you can
AFA Gary J break into it (during your program execution) and step/trace
through your code.
AFA Gary J It's nice, and a must have for assembly programmers on the
IIGS.
Dave Lyons I think GSBug calls GetNextEvent to get its keys, actually.
Coach, do you mean how it gets
Dave Lyons control on option-apple-ctrl-esc? That's just done by chaining
into the Apple-Ctrl-ESC vector
Dave Lyons and checking the KeyModReg for the Option key.
Dave Lyons (Apple-Ctrl-ESC produces an interrupt right away, whether keyboard
buffering is on or not.)
Coach101 GsBug will intercept some key strokes and not others... Caps
Lock being the keep/put-back trig
Dave Lyons Coach: Oh, *that*! That's even more interesting, but it's not
terribly related to keyboard
Dave Lyons buffering or ADB. GSBug is intercepting *all* toolbox calls (to
support tool-breaks), and if
Dave Lyons it sees a SystemEvent call
Dave Lyons and doesn't let it happen if CapsLock is down & the event is a
keyDown.
JeffreyH11 I know the ADB tool set can be called to simulate a keypress, but
it doesn't
JeffreyH11 support buffering (according to the Toolbox Ref.)
DL Davies Oh, are we talking about buffering?
DL Davies I am working on a macro program that sends keystrokes to the
keyboard
JeffreyH11 Keyboard buffering, actually.
DL Davies if I do it slow enough it works
DL Davies if to fast I miss key strokes
JeffreyH11 How are you sending keystrokes?
DL Davies any way to tell if the buffer is full?
DL Davies Using the ADB send command
JeffreyH11 You mean SendInfo, with command #$11 (keyCode)?
DL Davies yes
DL Davies I set up a heart beat to send the keystroke
DL Davies but if I send to many too fast
DL Davies it loses some
JeffreyH11 The Toolbox Ref., Vol. 1 (page 3-20) claims that that call doesn't
support
JeffreyH11 buffering, so you have to be sure that one keystroke is picked up
by the
JeffreyH11 calling program before the next is sent.
DL Davies ok, if it doesn't....how do I check if the key has been picked
up?
JeffreyH11 I'd be interested in seeing how you're doing it.
JeffreyH11 Try checking the keyboard latch at $E0C000 to see if the character
is still
JeffreyH11 there (with hi bit set). If so, the keyboard hasn't been read.
DL Davies right now I am checking $00C000...and if it is plus then the
keyboard
DL Davies has been read
DL Davies but this doesn't seem to work properly
DL Davies backwards....yes
DL Davies that's how I do it
DL Davies you are right...I typed it wrong
JeffreyH11 I think we just both said the same thing. What I meant earlier
was how you
JeffreyH11 were sending the keystrokes, etc.
DL Davies I check $00C000 first thing in my interrupt handler
DL Davies if it is minus...I get out immediately
DL Davies if it is plus...then I send another key
DL Davies but I still lose key strokes
JeffreyH11 Sounds to me like it should work perfectly, unless the program
isn't resetting
JeffreyH11 the buffer (by writing to $E0C010
Coach101 Something I have always been confused about...
Coach101 Do the softswitches I/O space etc, reside at $00Cxxx or $e0cxxx?
DL Davies both coach.
JeffreyH11 Technically, they reside at $E0C0xx, but they can also be found at
$00C0xx
Coach101 Is that true regardless of machine state? Me thinks not!
JeffreyH11 IF the I/O shadowing is enabled (which it usually is). I always
use $E0C0xx
JeffreyH11 just in case.
Dave Lyons (I/O shadowing always has to be enabled when interrupts occur!)
DL Davies Well, I hacked at diversy...and he seems to send about 5 keys at a
time
JeffreyH11 You mean Diversi-Key? I took a look at that code as well, and was
rather
JeffreyH11 confused by parts of it. Do you have a sensible disassembly of
any of it?
DL Davies MacroMate only sends one and it checks the same way I am
Coach101 I agree Jeffrey... E0Cxxx never fails, 00Cxxx could fail if the
machine state was muddled...
DL Davies No Jeff, Diversy Key is a MESS!
DL Davies I guess I can only send one key at a time, right?
JeffreyH11 Agreed. I've never seen MacroMate.
DL Davies I wanted to send about 5 every heartbeat to make it faster
DL Davies but I guess I can't
JeffreyH11 I guess so; unless someone redesigns the ADB chip to handle
buffering on that
JeffreyH11 command. I don't see any reason you couldn't speed it up, as long
as your
JeffreyH11 check works right.
DL Davies I set buffering with the send command (you can set the modes)
DL Davies doesn't seem to make a difference
JeffreyH11 The toolbox manual insists that SendInfo keyCode never supports
buffering,
JeffreyH11 regardless of the mode settings. See Vol. 1, page 3-20.
DL Davies it seems to buffer to a point
DL Davies maybe 20 characters
JeffreyH11 There may be a way to check the # of characters in the buffer by
reading
JeffreyH11 ADB ram, but I still haven't deciphered it. If you want, I'll
send you back
JeffreyH11 a copy of my ADBRead program (reads and displays ADB RAM
continuously until
JeffreyH11 you tell it to quit.)
DL Davies Dave, you got any help on this subject?
Dave Lyons Not really...not an ADB expert.
DL Davies Well, it works fine one character every HeartBeat, but I really
wanted to
DL Davies speed it up
DL Davies Is the ADB ram documented anywhere?
JeffreyH11 No way you can send more than one character per HeartBeat if
there's no
JeffreyH11 buffering, because the program can't read the keyboad until your
HeartBeat
JeffreyH11 routine ends.
DL Davies Is the ADB ram documented anywhere?
AFA Gary J We were just discussing that earlier.
AFA Gary J No. :)
DL Davies Wish I had been here
JeffreyH11 I don't think so, but I have a few notes on what some of the
locations do.
AFA Gary J (Just a minute or two before you came in. You had good timing
:)
DL Davies Diversy key plays with the RAM locations....where did he get his
info? :)
JeffreyH11 He probably just experimented until he got what he wanted. Notice
that in
JeffreyH11 Diversi-Key, it doesn't wait for the key to be read. If you don't
put delays
JeffreyH11 between the characters in your macros, and the application slows
down, you
JeffreyH11 will lose keystrokes.
AFA Gary J Right. (Probably hacked it out)
DL Davies Have you noticed he has his own buffer...very big....if you type
while a long
DL Davies macro executes NO keys are lost
DL Davies amazing...macromate does not do that
JeffreyH11 I've also noticed that he makes major changes to the Toolbox
vectors and
JeffreyH11 intercepts toolbox calls.
JeffreyH11 The reason (I think) that no keys are lost while a macro executes
is that the
JeffreyH11 macros bypass the KB buffer and so the buffer fills up with
manually typed
JeffreyH11 keystrokes. Anyone have any more info on DivKey or MacroMate?
DL Davies NO...I'm talking...he saves upto 255 characters...he does it
himself...I found
DL Davies his buffer...and saw the data in it
JeffreyH11 If you have any info whatsoever on how DivKey works, please send
it to me.
DL Davies I've been hacking it for a week
DL Davies and it still makes no sense
JeffreyH11 Do you want my ADBRead program in E-Mail? I might be able to send
it right
JeffreyH11 away (have to check, though.)
DL Davies He uses the setmodes call to disable the keyboard
DL Davies while the macro executes
DL Davies macromate doesn't do this
DL Davies sure, jeff! :)
JeffreyH11 I have some disassembly of it; do you have Orca/Disassembler?
DL Davies yep
JeffreyH11 I'll send you my template file for DivKey. What info do you have
on
JeffreyH11 MacroMate?
DL Davies This has been very frustrating....DAVE we need a Tech Note on ADB!
:)
JeffreyH11 Please!!!!
DL Davies Well....Thanks for all your help...Jeff, I'll get the file
later....thanks