From: Marko Mäkelä (marko.makela_at_hut.fi)
Date: 2004-05-19 17:52:35
On Tue, May 18, 2004 at 09:00:05PM -0500, Jim Brain wrote: > Do you have a state diagram you made to show the state machine? It's on a piece of paper somewhere, and also in a digital image. It should be drawn in a vector-based language, such as Metapost or SVG. > I checked on funet, but it doesn;t look like the IEC code additions are > on the site (I could be looking in the wrong place). True, I haven't published them. I would need a volunteer to find out what goes wrong when sending commands to a 1541. The C2N232 can emulate a peripheral nicely (LOAD, SAVE, OPEN, CLOSE, GET#), but for some reason, the 1541 doesn't behave when the C2N232 acts as a controller. I wouldn't like to release non-working code, but on the other hand I don't have the resources (3-channel storage oscilloscope or logic analyzer) to analyze the problem. Would you be interested in porting the C2N232 firmware to your hardware, or to build a C2N232 clone? Or someone else? Any 8 MHz Atmel AVR microcontroller with built-in UART and two hardware interrupt inputs should do. The tape interface routines can be stripped out. > I was wondering if you did a timer IRQ and a CLK IRQ for the EOI handshake > as well, or just the initial CLK HI... Yes, I think I'm using timer IRQs on the sender side. On the receiving side, I'm just polling a timer/counter register with interrupts enabled. > I had thought about using the timer IRQ to generate the 255 uS wait for > the EOI handshake, but it made the code quite a bit more complicated. Not necessarily: ;; Interrupt handler: timer/counter 0 overflow. ;; Return to the caller of sendsdelay, with interrupts disabled. ovf0: out TCCR0, YH ; stop the timer out TIMSK, YH ; disable timer/counter 0 overflow interrupt ldi 16, stacke-3 out SPL, 16 ; discard the return address ret ; return to the caller of sendsdelay, with I=0 ;; Subroutine: wait for PARAM0 microseconds ;; and disable interrupts. sendsdelay: mov ZH, PARAM0 com ZH ldi 16, 2 sendsdelay1: ; alternative entry point out TCCR0, 16 ; start timer/counter 0 at CK/8 out TCNT0, ZH ; set timer/counter 0 to 255-PARAM0 out TIFR, 16 ; clear timer/counter 0 overflow interrupt out TIMSK, 16 ; enable timer/counter 0 overflow interrupt rjmp waitirq ; wait for interrupt waitirq: sei ; enable interrupts ;; idle loop sleep ; wait for interrupt rjmp .-4 You can use the above code snippet under the conditions of the GNU General Public License, version 2. Marko Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.