home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / 01RTCMMS.SFX / 02rtcm.msgs next >
Encoding:
Text File  |  1990-02-12  |  31.7 KB  |  621 lines

  1.  ************
  2. Topic 18        Thu Feb 11, 1993
  3. CBM-MARK                     (Forwarded) 
  4. Sub: RTC Master ->  Looking for help!       
  5.  
  6. A place to ask for help with RTC Master.
  7. 181 message(s) total.
  8.  ************
  9.  ------------
  10. Category 8,  Topic 18
  11. Message 81        Wed May 31, 1995
  12. B.GANN1 [Brenda]             at 21:56 EDT
  13.  
  14.   
  15.  Sorry for the delay in answering... I just got a second job (among other
  16. things.)
  17.  
  18.    BG> download from GEnie with RTCM to the RL, it  dropped to the
  19.    BG> monitor
  20.  
  21.  EB>> I have a few questions to ask about it.... I'm not sure where topic
  22. overlap is in this so I'm going to consider this a grey area.
  23.  
  24.   - What protocol
  25.   - what File
  26.   - what is your RTCM setup
  27.   - how much room in your partition/directory 
  28.  
  29.  Well, I was assuming it was not RTMC because I just got the RL set up. Of
  30. course, now I don't remember what protocal, etc. 
  31.  
  32.  EB>> Anything else you can provide...  Also, to what address did it drop and
  33. into which bank?
  34.  
  35.  I didn't record the #. If anything happens again, I will be sure to get all
  36. the details. (I accidentally unplugged the RL and lost all that was on it. All
  37. it had on it was backups, so no prob.)
  38.  
  39.  Note that this is v 2.02 (I think) of RTCM, not #3.
  40.  
  41.  Brenda
  42.  ------------
  43. Category 8,  Topic 18
  44. Message 82        Wed May 31, 1995
  45. E.GBELL [e.g.bell]           at 22:56 EDT
  46.  
  47.  John:
  48.   JB> screen blanks, but not completely. The light  bar below the
  49.   JB> status bar and above the user input window stays lit
  50.  
  51.  John:  I'm using standard VDC registers to do the blanking.  The blanking
  52.  is supposed to be a horizontal blanking.  You can blank portions of the
  53.  screen, but only to the right or left of the blanked portion, not on the
  54.  top or the bottom of it.  Does this happen every time or just on occasion?
  55.  Is there anything peculiar about the D that I don't know?
  56.  
  57.  Brenda:
  58.   BG> the delay in answering... I just got a second job (among other
  59.   BG> things.)
  60.  
  61.  No problem.  I've had a lot going on around here as well.  Last week and
  62.  weekend were VERY hectic.
  63.  
  64.   BG> assuming it was not RTMC because I just got the RL set up
  65.  
  66.  We discussed this a few messages ago, and I'm taking the position that it
  67.  is NOT RTCMaster because the breaks have consistently been to memory
  68.  configuration that is an external ROM configuration, not one that RTCM
  69.  would use.  RTCM uses only configs 0, 63, 127, and 14 for its operations.
  70.  There are simply no other configs used by RTCM.  In order for it to BRK
  71.  in another config, it would have to be put there by something else, in
  72.  this case, an external ROM, RamLink.
  73.  
  74.  I have been meaning to contact Mark Fellows, but will do it from work where
  75.  it is not an LD call for me.  However, with my wife's frequent false labor
  76.  and the real thing last Saturday, I have not been able to devote the time
  77.  to making the call.  It is on my to-do list for next week when I'm back
  78.  from vacation.
  79.  
  80.  I have been taking (or feeling like I've been taking) the heat regularly
  81.  for problems with the RamLink, but have found more and more that there
  82.  are some warts that it has... not that my code will ever be perfect...
  83.  just that I need more information so that everyone's warts are addressed,
  84.  not just mine.... here are some of the things discussed that I need 
  85.  information for....
  86.  
  87.  Doug has suggested that this problem involves interrupts.  However, all
  88.  interrupts I have ever seen start out by storing, among other things,
  89.  the memory configuration, then restoring it on exit.  My code does this.
  90.  
  91.  Stray NMIs.  Perhaps, tho my code disables them before DOS operations.
  92.  And on the SwiftLink, that is even easier than on user port modems,
  93.  involving basically only a 'POKE'.
  94.  
  95.  The problem John had involved calling clock routines with no clock
  96.   installed.  Regardless of what is supposed to happen, this causes a
  97.  bRK to monitor, again to config 8.  The TRAP function is set up, but
  98.  is circumvented somehow.  go figure.
  99.  
  100.  Here is one that I found that no one else has gotten bitten by as yet,
  101.  but which I've had confirmed elsewhere (by David Schmoll, one of the 
  102.  wunderkinds mentioned in the last C=W)... when you try to save a file
  103.  to a RamLink partition that does not have room for the file, you will
  104.  not only get a splat file, you will hang the computer... and the kicker
  105.  is that this works from RTCMaster, the BASIC interpreter, or the machine
  106.  language monitor.
  107.  
  108.  I really have to take the position that these things are not my problems,
  109.  but which I have to find some way to deal with because they affect my
  110.  program.  I don't think it is only my program.  However, my problem is 
  111.  that there is virtually no programming information on the machine 
  112.  language level... no examples, no rom maps, nothing.  NMIs, which are
  113.  frequently pointed to as culprits, are not dealt with in any measure
  114.  in the RL manual.
  115.  
  116.  What I would like to see is an extensive article in C=World by someone
  117.  who REALLY WON'T PULL PUNCHES dealing with the bad as well as the good.
  118.  The last article I saw where an author said he wasn't going to pull
  119.  punches was glaringly absent of punches.  Problems are not a bad thing,
  120.  and definitely not something that would keep anyone from buying something.
  121.  The Intel reaction, however, is something else.  We programmers need more
  122.  information tho... much more than has been published to date.
  123.  
  124.  The most important thing to note in even of BRK, Brenda, is the config
  125.  and address of the monitor.  The config is the first byte, the address 
  126.  is the other 4 bytes.  Anything starting with an 8 is RamLink code.
  127.  Anything else is probably mine.
  128.  ------------
  129. Category 8,  Topic 18
  130. Message 83        Sun Jun 04, 1995
  131. CMD-DOUG                     at 16:23 EDT
  132.  
  133.  
  134.  > We discussed this a few messages ago, and I'm taking the position that it
  135.  > is NOT RTCMaster because the breaks have consistently been to memory
  136.  > configuration that is an external ROM configuration, not one that RTCM
  137.  > would use.  RTCM uses only configs 0, 63, 127, and 14 for its operations.
  138.  > There are simply no other configs used by RTCM.  In order for it to BRK
  139.  > in another config, it would have to be put there by something else, in
  140.  > this case, an external ROM, RamLink.
  141.  
  142. RAMLink banks into its own memory configuration only whenever a Kernal routine
  143.  involving disk access is utilized. If an NMI occurs while this configuration 
  144. is in effect, execution immediately jumps to the address pointed to by the NMI
  145.  vector. Now, we know that, in your case, the NMI vector must be pointing to 
  146. somewhere other than the $FF05 address that is the norm, since you're using a 
  147. custom NMI handler. Obviously, it must be in 'common' RAM, or you'd possibly 
  148. have problems without a RAMLink as well as with one.
  149.  
  150. So, let's assume that you get to your custom NMI handler okay at this point, 
  151. and like the Kernal NMI handler, it first stores all important info away.
  152.  
  153.  > Doug has suggested that this problem involves interrupts.  However, all
  154.  > interrupts I have ever seen start out by storing, among other things,
  155.  > the memory configuration, then restoring it on exit.  My code does this.
  156.  
  157. Okay, so now you've got the bank 8 configuration stored away since you RAMLink
  158.  was interrupted during one of the short spells in which it wasn't napping.
  159. You  proceed to process your NMI, restore the bank 8 configuration, and return
  160. from  the interrupt... but the DOS ROM sub-segment within RAMLink that was
  161. executing  when the NMI occurred is no longer in the memory map, so the
  162. processor  executes garbage until it runs into a break (zero byte). You see,
  163. you can't  bring certain portions of RAMLink back just by returning from your
  164. interrupt.  RAMLink has several ROM sub-segments which can only be brought
  165. back through  special routines. How? Irrelevant. The NMI NEVER SHOULD HAVE
  166. OCCURED IN THE  FIRST PLACE, so that needs to be fixed. Don't treat the
  167. symptom... cure the  problem that caused it. You can call this a 'quirk' of
  168. RAMLink if you like,  but the simple fact is that RAMLink is enforcing a rule
  169. that you might  otherwise get away with breaking--no interrupts of any type
  170. are allowed during  serial bus access--a long-standing rule in Commodore
  171. programming.
  172.  
  173. Now, you could argue that NMI's aren't occuring during serial bus access in 
  174. your code, and ask what can cause RAMLink itself to break from within bank 8.
  175. Frankly, short of a hardware problem (bad RAMLink, bad computer, both a bad 
  176. RAMLink and a bad computer, bad connections betweem the RAMLink and the 
  177. computer, or improper timing relationship between RAMLink and the computer)
  178. that's pretty much it. There are no other documented causes for such a break. 
  179. Furthermore, this situation has been encountered by at least 3 or 4 
  180. programmer's before you--all doing the same thing: trying to get custom RS-232
  181.  routines going for the 128 with a RAMLink attached. Those who have solved it 
  182. have done so by heeding the same advice I've given you: make sure that not a 
  183. single NMI can occur during serial bus routines. Brian Bell is due in an RTC 
  184. in a couple of days; ask him about it, he's one of those who has successfully 
  185. gotten around this problem. How did he do it? He set up his own vectors for 
  186. every Kernal routine that performs serial bus access, and made sure that each 
  187. of these ran through a routine to kill the NMI's before moving on to execute 
  188. thier normal funtions. Some of of the non-vectored routines had to be dealt 
  189. with as exceptions, like BLOAD and BSAVE (all according to Brian).
  190.  
  191.  > I have been taking (or feeling like I've been taking) the heat regularly
  192.  > for problems with the RamLink, but have found more and more that there
  193.  > are some warts that it has... not that my code will ever be perfect...
  194.  > just that I need more information so that everyone's warts are addressed,
  195.  > not just mine.... here are some of the things discussed that I need
  196.  > information for....
  197.  
  198.  > The problem John had involved calling clock routines with no clock
  199.  > installed.  Regardless of what is supposed to happen, this causes a
  200.  > bRK to monitor, again to config 8.  The TRAP function is set up, but
  201.  > is circumvented somehow.  go figure.
  202.  
  203. TRAP only redirects program execution via BASIC's error handler. The problem 
  204. isn't a BASIC error, so TRAP isn't going to catch it. Here again, the only 
  205. possible causes are as outlined above. I'd try doing that POKE you have to 
  206. disable SwiftLink NMI's prior to starting your drive routines in the loader. 
  207. Whether you turned them on or not is moot--you don't know the state of things 
  208. when this program starts, so shut them down to be safe. If that doesn't cure 
  209. JBEE's problem, then there may be a hardware problem specific to JBEE's 
  210. system.
  211.  
  212.  > Here is one that I found that no one else has gotten bitten by as yet,
  213.  > but which I've had confirmed elsewhere (by David Schmoll, one of the
  214.  > wunderkinds mentioned in the last C=W)... when you try to save a file
  215.  > to a RamLink partition that does not have room for the file, you will
  216.  > not only get a splat file, you will hang the computer... and the kicker
  217.  > is that this works from RTCMaster, the BASIC interpreter, or the machine
  218.  > language monitor.
  219.  
  220. I just saved a 60 block file to a 1581 partition on my RAMLink that had only
  221. 58 blocks free. I got a splat file, but my system didn't lock up. So 
  222. apparently, creating the problem is either more involved than you indicate, or
  223.  is possibly caused by either a hardware problem or an old DOS revision.
  224.  
  225. I also created a small BASIC program to write a SEQ file, which continues to 
  226. write until the disk is full. It does this by checking the status byte after 
  227. each byte is written, and when status comes up with -128, it closes the file. 
  228. Of course, the status can't come up with this value until there's no more room
  229.  left on the disk, so you're stuck with a splat file at this point. There's 
  230. only one way that I know of that can be used to avoid splat files altogether--
  231. check the blocks free before you start your file, then count the bytes as you 
  232. write them.
  233.  
  234. Regardless, I didn't experience a single lock-up in testing these routines 
  235. repeatedly.
  236.  
  237.  > I really have to take the position that these things are not my problems,
  238.  > but which I have to find some way to deal with because they affect my
  239.  > program.  I don't think it is only my program.  
  240.  
  241. You're free to take whatever position you wish, but the symptoms fit the 
  242. situation that I have repeatedly outlined to you, that NMI's are occuring 
  243. while RAMLink is operating it's DOS routines. And it's up to your program to 
  244. see that this doesn't happen.
  245.  
  246.  > However, my problem is that there is virtually no programming information
  247.  > on the machine language level... no examples, no rom maps, nothing.  NMIs,
  248.  > which are frequently pointed to as culprits, are not dealt with in any
  249.  > measure in the RL manual.
  250.  
  251. Not that any of this would help you resolve your problem. You'd simply have a 
  252. few thousand more pages of information to look through to try and find some 
  253. reason for a problem that can be solved by doing what I've been telling you to
  254.  do. This isn't a RAMLink-specific coding problem, either--it's a problem with
  255.  coding custom NMI's to avoid problems with serial bus access. It's just that 
  256. the nature of the way RAMLink works will make such problems in code show up 
  257. more readily.
  258.  
  259. Most problems that pop up with programs while using our devices tend to be 
  260. related to doing things which a programmer should not be doing with any 
  261. device. Programmers assume, however, that because they get away with doing 
  262. something on a stock system that their code can't possibly be doing anything 
  263. wrong. It's sort of like assuming that because you've never gotten a ticket 
  264. while speeding on a road that the police don't watch that you shouldn't get a 
  265. ticket for doing so on a road that they do watch. I've written routines myself
  266.  in the past where I got away without clearing the status byte when it should 
  267. have been cleared, and I've seen routines that have gotten away with calling 
  268. some of the Kernal serial routines out of order; but eventually these routines
  269.  will usually break on someone's equipment or setup.
  270.  
  271. If you correctly follow the general rules of programming for Commodore 
  272. devices, you really shouldn't run into problems with RAMLink or our other 
  273. products. So what you're asking for--whether you realize it or not--is for 
  274. RAMLink's manual to become a general reference on how to program with 
  275. Commodore devices in general. That's well beyond the scope of a manual which 
  276. already goes FAR BEYOND what any of Commodore's own device manuals did in 
  277. covering the device itself. Not to mention that the additional information 
  278. would be useful to probably less than 1 pecent of those who buy the product.
  279.  
  280. Supplying ROM maps, or more advanced information on how RAMLink operates gets 
  281. into proprietary information, or in some lesser cases, information we'd rather
  282.  not see utilized (i.e., locations of routines which move from one version of 
  283. the DOS to the next). We have provided specific programmer's with additional 
  284. information in such case where they have been able to prove they have a true 
  285. need for it, and will continue to do so. Your situation doesn't qualify for 
  286. such a requirement... you're doing things that others have accomplished with 
  287. no more information than what we have provided you with.
  288.  
  289.  > What I would like to see is an extensive article in C=World by someone
  290.  > who REALLY WON'T PULL PUNCHES dealing with the bad as well as the good.
  291.  
  292. I'd like to see one person who can define just what such an article is to 
  293. cover. Specifically. If it can't be defined, it can't be written. Once it's 
  294. defined, who's qualified to write it? Who decides what's good and bad? It 
  295. sounds to me like what you would want would be far beyond the knowledge of any
  296.  single writer I'm aquainted with. Even Mark, who engineered the product, 
  297. couldn't say specifically what will occur and why under every possible 
  298. programming or hardware situation without testing and studying the code.
  299.  
  300.  > The last article I saw where an author said he wasn't going to pull
  301.  > punches was glaringly absent of punches.
  302.  
  303. Articles for CW aren't edited to remove information about problems with 
  304. products--ours or anyone else's. We don't instruct our writers to avoid 
  305. talking about problems, nor do we tell them to give our products preference 
  306. over others. We would not, however, print an article which claims a problem 
  307. without verified proof that such a problem really exists and that it isn't an 
  308. attribute of using or programming the product incorrectly. Apparently the 
  309. author of whatever article you're referring to simply didn't find much in the 
  310. way of bad things to say.
  311.  
  312.  > Problems are not a bad thing, and definitely not something that would keep
  313.  > anyone from buying something. The Intel reaction, however, is something
  314.  > else.  We programmers need more information tho... much more than has been
  315.  > published to date.
  316.  
  317. Problems are a bad thing, and should be dealt with as quickly as possible. In 
  318. the past, when someone could show us an example of code that should work on 
  319. our device but didn't, we've moved as quickly as possible to locate and 
  320. resolve the problem. There's nothing to indicate that this is one of those 
  321. situations, though, based on what you're seeing and our past experiences with 
  322. others trying to write the type of program you're working on.
  323.  
  324. There's no 'Intel reaction' here. Intel knew of a problem with THEIR product 
  325. which they simply didn't tell anyone about. From our standpoint, we're not 
  326. talking about a problem with OUR product, but a problem with YOUR program.
  327.  
  328.  ------------
  329. Category 8,  Topic 18
  330. Message 84        Sun Jun 04, 1995
  331. E.GBELL [e.g.bell]           at 19:25 EDT
  332.  
  333.  I don't know why, but I've been getting a lot of line noise in my mail
  334.  lately... can't tell if it is in the message, or just in what I'm getting
  335.  so if I'm missing anything in my replies, that is why.... now...
  336.  
  337.   DC> You  proceed to process your NMI, restore the bank 8
  338.   DC> configuration, and return from  the interrupt... but the DOS
  339.   DC> ROM sub-segment within RAMLink that was executing  when the
  340.   DC> NMI occurred is no longer in the memory map, so the processor 
  341.   DC> executes garbage until it runs into a break (zero byte). You
  342.   DC> see, you can't  bring certain portions of RAMLink back just by
  343.   DC> returning from your interrupt.  RAMLink has several ROM
  344.   DC> sub-segments which can only be brought back through  special
  345.   DC> routines. How? Irrelevant. The NMI NEVER SHOULD HAVE OCCURED
  346.   DC> IN THE  FIRST PLACE, so that needs to be fixed. Don't treat
  347.   DC> the symptom... cure the  problem that caused it
  348.  
  349.  Everything you are saying may be correct... but you are basing it all on
  350.  the assumption that this is happening because of an errant NMI.  In the
  351.  case of the problem Brenda and Eddie mentioned about BRKs in the boot at
  352.  the point of reading the clock, no such problem is possible and I'll tell
  353.  you why... the custom handlers are not implemented... or at least let me
  354.  say that in Eddie's case because Brenda is not using 3.00.  I changed the
  355.  call because I figured there was no reason for that handler to be in place
  356.  by that time.  Your whole point above seems to hinge on an NMI.  I've 
  357.  shown you my code.  The SL code is even easier to disable the interrupts
  358.  because of the way it is done.
  359.  
  360.   DC> RAMLink is enforcing a rule that you might  otherwise get away
  361.   DC> with breaking--no interrupts of any type are allowed during 
  362.   DC> serial bus access--a long-standing rule in Commodore
  363.   DC> programming.
  364.  
  365.  Agreed that they should be disabled.... IFF that is the problem here.  I'm
  366.  no longer convinced that it is... and it seems odd that RamLink is 
  367.  enforcing a rule like that by BRKing to monitor.  I have seen other users
  368.  here mention the same thing... wasn't another one somethng to do with
  369.  a color or something.  It is in the BB here... just can't remember where.
  370.  No NMIs there.  Just something that a user was doing that the RL did not
  371.  anticipate.  It seems to me that that kind of response from ANY hardware
  372.  is kind of extreme.  As you point out, it is practice to disable the NMIs
  373.  during DOS access, but the 128 doesn't BRK to monitor if you do that with
  374.  a user port handler... the data gets corrupted if anything.
  375.  
  376.    DC> Frankly, short of a hardware problem (bad RAMLink, bad
  377.   DC> computer, both a bad  RAMLink and a bad computer, bad
  378.   DC> connections betweem the RAMLink and the  computer, or improper
  379.   DC> timing relationship between RAMLink and the computer) that's
  380.   DC> pretty much it
  381.  
  382.  Agreed!  Which would also explain why it happens to some people and not
  383.  to others... namely me.  And that is what makes me VERY frustrated.  I
  384.  can't duplicate it EVER, which is also why I'm disinclined to jump on the
  385.  NMI thing.
  386.  
  387.   DC> trying to get custom RS-232  routines going for the 128 with a
  388.   DC> RAMLink attached. Those who have solved it  have done so by
  389.   DC> heeding the same advice I've given you: make sure that not a 
  390.   DC> single NMI can occur during serial bus routines
  391.  
  392.  I'm inclined to agree to a point on this too.... again, it assumes that
  393.  your advice covers the whole problem.  In that I remain unconvinced 
  394.  because the problem is not consistent across 128s.  And the routines work
  395.  in the Commodore operating system without complaint... I put this before
  396.  everyone as evidence that I've followed proper programming techniques.
  397.  And btw, rather than going after vectors, I made front ends for the kernal
  398.  routines that disable the NMIs and then proceed through their normal JMP
  399.  addresses.  And for the record I don't object to adding code to make the
  400.  RamLink happy.  I am just frustrated that, no matter who we say things,
  401.  the RamLink introduces special concerns above and beyond what the C128
  402.  operating system does... and that these cannot be salved by merely working
  403.  to handle the C128 normally.   If they could, this would not be an issue.
  404.  
  405.   DC> creating the problem is either more involved than you indicate,
  406.   DC> or  is possibly caused by either a hardware problem or an old
  407.   DC> DOS revision.
  408.  
  409.  Probably right.... but it is a problem that has been experienced by more
  410.  than me... and my point is, and was, that things like this, which I 
  411.  consider a quirk, cause a LOT of time and frustration dealing with things
  412.  that are plainly not predictable... and that is why I have to pause and
  413.  think about what else is afoot when I run into problems like Eddie and
  414.  Brenda and John.
  415.  
  416.   DC> doing things which a programmer should not be doing with any 
  417.   DC> device. Programmers assume, however, that because they get
  418.   DC> away with doing  something on a stock system that their code
  419.   DC> can't possibly be doing anything  wrong
  420.  
  421.   DC> we're not  talking about a problem with OUR product, but a
  422.   DC> problem with YOUR program.
  423.  
  424.  That is what they said about the save with replace bug for years... and
  425.  I've seen the flippant 'your program is not handling error messages
  426.  gracefully' replies over the years.  But saying it don't make it so.
  427.   The best way, I guess, to make a product look perfect is to minimize
  428.  the hard complaints to programmers who bend the rules.  But you may find
  429.  that cuts a wide swath.  As I said before, Dave Schmoll has confirmed my
  430.  observations about the RamLink in the lock up and the format.  Your 
  431.  product is good... it is NOT PERFECT.  Saying so don't make it so.
  432.  I'm sure your reviewers will continue to see little negative with your
  433.  products as long as the checks are signed promptly.  There are negatives,
  434.  just like with every other product ever released.  You can harp about 
  435.  how any faults are someone else's fault.  The fact that there are 
  436.  considerations above those with a normal 128 say to me, at least, that
  437.  a programmer needs to give closer consideration to the thing.  You seem
  438.  to be saying that your device is more commodore compatible than 
  439.  Commodore... hmmmmmmmmm!
  440.  
  441.  I'm not going to jump through any more hoops to make things happy 
  442.  together.... if you want to say I'm cheating or cutting corners or doing
  443.  whatever it is you say I'm doing, fine.  I'm willing to do whatever it
  444.  is I have to do to make things work, but I have heard these generalities
  445.  before.  Just for curiosity, does Brian Bell have a term program or just
  446.  a BBS?   Seems to me that fewer people run BBS programs than term 
  447.  programs, let alone one specific BBS.  I suppose we can take it as a 
  448.  matter of faith that he has indeed solved all of this.
  449.  
  450.  I don't have as much at stake, Doug, in what I'm saying.  I'm not making
  451.  anything on what I'm doing.  And there are definitely others who are
  452.  having the same experiences... in programs with no NMIs.  I'm willing to
  453.  let people judge for themselves.  I said before... the RamLink is a
  454.  good product.... It is not perfect tho.
  455.  ------------
  456. Category 8,  Topic 18
  457. Message 85        Sun Jun 04, 1995
  458. M.RANDALL2 [Maurice]         at 22:13 EDT
  459.  
  460. Ed, 
  461.   I don't know if any of this would pertain to your situation, but here is
  462. partially how I implemented NMI interrupts within geoFAX:
  463.  
  464.   After determining the machine that it is running on, 64 or 128, I set up the
  465. NMI vector AND the jump address in the jump table at $FFFA. I had to do some
  466. fancy stuff to make this work in GEOS because the disk drivers screw up the
  467. NMI interrupt vector whenever InitForIO is called. InitForIO gets the machine
  468. out of GEOS mode and sort of into a mode with the Commodore Kernal visible. On
  469. the 128, it doesn't really make the Kernal visible, but it will allow the jump
  470. table to be utilized.
  471.   On the 64, it was pretty easy. I just pointed the vector to my custom NMI
  472. routine and also put this same address into $FFFA. Keep in mind that the
  473. address that $FFFA is pointing at on the 64 works differently than the way it
  474. works on the 128. On the 64, it jumps through the vector at $0318 and then
  475. back into the kernal routine at which time it saves the a, x, and y registers
  476. and continues it's other stuff. On the 128, it saves the a, x, and y registers
  477. and THEN jumps through the vector at $0318 and then back into the kernal
  478. routine.
  479.   On the 128, I change the ram locations at $FFFA in both bank 0 and bank 1 to
  480. point to my NMI routine. This routine saves the a, x, and y registers, calls
  481. my custom routine and then restores the a, x, and y registers. The vector at
  482. $0318, however, I point to a different routine that does not save the a, x,
  483. and y registers. The only way my NMI routines will get called from the vector
  484. is if an NMI occurs while the kernal ROM is switched in. This particular
  485. routine calls my custom NMI routines and then restores the a, x, and y
  486. registers.
  487.   So, to recap, on a 128, there are 3 copies of the addresses that are stored
  488. at $FFFA. One in bank 0, one in bank 1, and one in the ROM. On a RamLink
  489. equipped machine, there is also one in the RamLink ROM. Whenever a ROM is
  490. switched in, the NMI will always go through the vector at $0318. Whenever RAM
  491. is switched in, you can control where the NMI goes by changing the value at
  492. $FFFA. This is how I had to do it with GEOS to keep the disk drivers from
  493. messing me up too bad. I still have to keep a watch on the vector at $0318
  494. since they mess with that, but while GEOS is running, most of the time RAM is
  495. switched in.
  496.   I'm sure that you already know most of this stuff, but it might help other
  497. programmers that haven't yet gotten into this sort of thing.
  498.   One other thing I had to do on the 128 was to make sure that a copy of my
  499. interrupt handler was in both bank 0 and bank 1. I wanted to make sure that no
  500. matter what configuration the machine was in when an NMI occured, that the
  501. routine would be accessed. Otherwise, it would just go off into never, never
  502. land.
  503.  
  504. -Maurice
  505.  ------------
  506. Category 8,  Topic 18
  507. Message 86        Sun Jun 04, 1995
  508. CMD-DOUG                     at 22:32 EDT
  509.  
  510. That's all well and good, Ed, but if you go back and look at what I said,
  511. we've covered everything that we know of that can cause those breaks... NMI's
  512. during RAMLink DOS access, or hardware problems. Now, if these folks can run
  513. something that's pretty hardware intensive (RAMLink-wise) like GEOS for
  514. example, it's a fair bet that their hardware is working pretty well. I'm all
  515. for finding a solution to your problem, but I've got a sneaking suspicion that
  516. it isn't hardware problems for this many folks.
  517.  
  518. For the record, btw, Brian had well over 100 systems in use last I knew, and a
  519. large number of those are running SwiftLink/RAMLink combos. These systems run
  520. 24 hours a day, 7 days a week for the most part--that's pretty effective
  521. testing in my opinion.
  522.  
  523. When a problem does indeed exist with NMI's occurring when they shouldn't, it
  524. won't show up on every system. No-one at CMD has weeks to devote to studying
  525. why that is, but we can only assume that it is likely due to a large number of
  526. variables that can affect the relationship between when NMI's and DOS accesses
  527. occur. I would assume, however, that if you varied the baud rate enough, you
  528. should be able to get it to happen at some point on any system if the problem
  529. does exist.
  530.  
  531. Concerning David Schmoll's confirmation of the lock-up problem, it's basically
  532. meaningless. I've tested for the stated problem, and it doesn't exist, at
  533. least on a RAMLink running the current DOS. I can't speak for older DOS
  534. revisions, because we do indeed fix problems when we can verify them, and
  535. recommend that anyone who is experiencing problems have their RAMLink upgraded
  536. and checked out. We can't fix problems that can't be reproduced on our systems
  537. (and we have quite a few), and have to assume that such problems in the field
  538. mean either old version problems or bad hardware.
  539.  
  540.  ------------
  541. Category 8,  Topic 18
  542. Message 87        Sun Jun 04, 1995
  543. B.MASSE [BIG BOB]            at 22:34 EDT
  544.  
  545.    
  546.   >So far as I know, geoCalc should work
  547.   >fine with RAMLink.
  548.  
  549.   I just have problems with the 128 versions.  But I think it goes to 
  550.   argument that the RamLink can have it's own personality and be
  551.   a bit finnicky when confronted with a program that It doesn't like.
  552.   Could be the Dos changes that have been implemented over the years
  553.   to upgrade the Ramlink or even a dirty pin somewhere on the board.  
  554.  
  555.   99 percent compatibility is still quite impressive in my book.
  556.   Thanks for the response Doug.
  557.  
  558.   Bob :)
  559.  
  560.  
  561.  
  562.  ------------
  563. Category 8,  Topic 18
  564. Message  88       Sun Jun 04, 1995
  565. B.MASSE [BIG BOB]            (Forwarded) 
  566.  
  567.   
  568.  I do agree with Ed about the Ramlink.  My Ramlink will work flawlessly with 
  569.  any program I own except when I load GeoSpell or GeoCalc it has always 
  570.  choked.  Three different copies of GeoCalc/Geospell and three different
  571.  128's.  Always the same problem.  Go Figure... 
  572.  
  573.  Bob
  574.  
  575.  
  576.  
  577.  
  578.  ------------
  579. Category 8,  Topic 18
  580. Message  89       Sun Jun 04, 1995
  581. CMD-DOUG                     (Forwarded) 
  582.  
  583. With all due respect, Bob, it's very likely that those problems are also due
  584. to how the programs were programmed. So far as I know, geoCalc should work
  585. fine with RAMLink. But I am aware that geoSpell has problems, and we suspect
  586. that those problems are indeed due to the way it was programmed, and that
  587. there is code in geoSpell that was written with specific devices which were
  588. known to work with GEOS at the time it was written. It's something like the
  589. Super Debugger for geoProgrammer, which assumes that RAM expansion means a
  590. Commdore REU. Won't work with a GEORAM, won't work a RAMLink, won't work with
  591. anything but a Commodore REU or 100% clone.
  592.  
  593. Some of the folks who programmed for BSW, especially early on, had a real bad
  594. habit of breaking their own rules when they found it convenient to do so.
  595. Programs will indeed break if they aren't written generically. RAMLink isn't a
  596. Commodore REU, and it isn't a Commodore 1541. GEOS programs that adhere
  597. strictly to using standard GEOS routine calls won't break on a RAMLink.
  598.  ------------
  599. Category 8,  Topic 18
  600. Message  90       Sun Jun 04, 1995
  601. B.MASSE [BIG BOB]            (Forwarded) 
  602.  
  603.   
  604.  >So far as I know, geoCalc should work
  605.  >fine with RAMLink.
  606.  
  607.  I just have problems with the 128 versions.  But I think it goes to 
  608.  argument that the RamLink can have it's own personality and be
  609.  a bit finnicky when confronted with a program that It doesn't like.
  610.  Could be the Dos changes that have been implemented over the years
  611.  to upgrade the Ramlink or even a dirty pin somewhere on the board.  
  612.  
  613.  99 percent compatibility is still quite impressive in my book.
  614.  Thanks for the response Doug.
  615.  
  616.  Bob :)
  617.  
  618.  
  619.  
  620.  ------------
  621.