Previous 15994 Revisions Next

r11208 Saturday 16th April, 2011 at 20:26:53 UTC by R. Belmont
[8530SCC]: Don't crash on 0 baud divisor (fixes original Apple IIgs Tour)
[src/mess/machine]8530scc.c

src/mess/machine/8530scc.c
r11207r11208
1515    PARAMETERS
1616***************************************************************************/
1717
18#define LOG_SCC   0
18#define LOG_SCC   (0)
1919
2020
2121
r11207r11208
196196   scc8530_t *scc = get_token(device);
197197   sccChan *pChan = &scc->channel[param];
198198   int brconst = pChan->reg_val[13]<<8 | pChan->reg_val[14];
199   int rate = scc->clock / brconst;
199   int rate;
200200
201   if (brconst)
202   {
203      rate = scc->clock / brconst;
204   }
205   else
206   {   
207      rate = 0;
208   }
209
201210   // is baud counter IRQ enabled on this channel?
202211   // always flag pending in case it's enabled after this
203212   pChan->baudIRQPending = 1;
r11207r11208
212221   }
213222
214223   // reset timer according to current register values
215   pChan->baudtimer->adjust(attotime::from_hz(rate), param, attotime::from_hz(rate));
224   if (rate)
225   {
226      pChan->baudtimer->adjust(attotime::from_hz(rate), param, attotime::from_hz(rate));
227   }
228   else
229   {
230      pChan->baudtimer->adjust(attotime::never, param, attotime::never);
231   }
216232}
217233
218234/*-------------------------------------------------
r11207r11208
679695}
680696
681697DEFINE_LEGACY_DEVICE(SCC8530, scc8530);
698
699/*
700
701AppleTalk check:
702
703SCC: port B reg 9 write 0x40      Channel Reset B
704SCC: port B reg 4 write 0x20     SDLC mode
705SCC: port B reg 10 write 0xe0     CRC preset + FM0
706SCC: port B reg 6 write 0x00     SDLC address
707SCC: port B reg 7 write 0x7e     SDLC flag
708SCC: port B reg 12 write 0x06     baud rate low
709SCC: port B reg 13 write 0x00     baud rate high
710SCC: port B reg 14 write 0xc0     Set FM mode
711SCC: port B reg 3 write 0xdd     Rx 8 bits, enter hunt mode, CRC enable, address search mode, Rx enable
712SCC: port B reg 2 write 0x00     interrupt vector 0
713SCC: port B reg 15 write 0x08     DCD interrupt enable
714SCC: port B reg 1 write 0x09     Rx IRQ on first char or special, ext int enable
715SCC: port B reg 9 write 0x0a     Master IRQ enable, no-vector mode
716SCC: port B reg 11 write 0x70     Rx clock = DPLL output, Tx clock = BR generator
717SCC: port B reg 14 write 0x21     Enter search mode, BR generator enable
718SCC: port B reg 5 write 0x60     Tx 8 bits/char
719SCC: port B reg 6 write 0x2a     SDLC address
720SCC: port B reg 0 read 0x00
721SCC: port B reg 15 write 0x88     DCD interrupt enable, break/abort interrupt enable
722
723(repeats)
724SCC: port B reg 1 read 0x09
725SCC: port B reg 3 write 0xd0
726SCC: port B reg 3 write 0xdd     Rx 8 bits, enter hunt mode, CRC enable, address search mode, Rx enable
727SCC: port B reg 15 write 0x08     DCD interrupt enable
728SCC: port B reg 0 read 0x00
729SCC: port B reg 15 write 0x88
730
731System 7:
732
733SCC: port B reg 9 write 0x40     Channel Reset B                                                       
734SCC: port B reg 4 write 0x20     SDLC mode
735SCC: port B reg 10 write 0xe0     CRC preset + FM0
736SCC: port B reg 6 write 0x00     SDLC address
737SCC: port B reg 7 write 0x7e     SDLC flag
738SCC: port B reg 12 write 0x06     baud rate low
739SCC: port B reg 13 write 0x00     baud rate high
740SCC: port B reg 14 write 0xc0     Set FM mode
741SCC: port B reg 3 write 0xdd     Rx 8 bits, enter hunt mode, CRC enable, address search mode, Rx enable
742SCC: port B reg 2 write 0x00     interrupt vector 0
743SCC: port B reg 15 write 0x08     DCD interrupt enable
744SCC: port B reg 1 write 0x09     Rx IRQ on first char or special, ext int enable
745SCC: port B reg 9 write 0x0a     Master IRQ enable, no-vector mode
746SCC: port B reg 11 write 0x70     Rx clock = DPLL output, Tx clock = BR generator
747SCC: port B reg 14 write 0x21     Enter search mode, BR generator enable
748SCC: port B reg 5 write 0x60     Tx 8 bits/char
749SCC: port B reg 6 write 0x01     SDLC address
750SCC: port B reg 3 write 0xdd     Rx 8 bits, enter hunt mode, CRC enable, address search mode, Rx enable
751
752(repeats)
753
754SCC: port B reg 0 read 0x00
755SCC: port B reg 15 write 0x88     DCD interrupt enable, break/abort interrupt enable
756SCC: port B reg 15 write 0x08     DCD interrupt enable
757SCC: port B reg 1 read 0x09     Rx IRQ on first char or special, ext int enable                       
758SCC: port B reg 3 write 0xdd     Rx 8 bits, enter hunt mode, CRC enable, address search mode, Rx enable
759
760*/

Previous 15994 Revisions Next


© 1998-2018 The MESS Team