Re: Weird problem writing buffer 1 of a 8250 drive

From: Spiro Trikaliotis (ml-cbmhackers_at_trikaliotis.net)
Date: 2008-09-04 18:02:11

Hello,

I am no 8250 expert, but I tried it (on VICE, xpet with 8250 as #8):

* On Thu, Sep 04, 2008 at 04:39:09PM +0200 Anders Carlsson wrote:
> Ruud wrote:
>
>> OK. So far we know that m-w and m-e don't work as it should on a 8250.
>
> Did you try several units, in case the one you used would have some minor 
> fault otherwise not detected?

* On Thu, Sep 04, 2008 at 10:04:54AM +0200 I wrote:
 
> * On Thu, Sep 04, 2008 at 08:50:16AM +0200 ruud.baltissen@apg.nl wrote:
>  
> > Running the same program on a PET:
> [...]
> >  100 open1,8,15
> >  200 for i=0 to 15 : print i;
> >  210 print#1,"m-w" chr$(i) chr$(18) chr$(1) chr$(i) : next
> >  240 print : print 400 for i=0 to 15
> >  410 print#1,"m-r" chr$(i) chr$(18)
> >  420 get#1,a$ : if a$="" then a$=chr$(0)
> >  430 print asc(a$);" "; : next
> > ready.
> > run
> >  0  1
> 
With VICE, I recognized that even the first M-W was not executed -
whatever was there before running the program still remained there. So,
I tried to analyse it better. For this, I used the ROM listing from

http://www.zimmers.net/anonftp/pub/cbm/firmware/drives/old/8050/d/8250rom.dis)

If running the first PRINT# statement "by hand", I can see that $D30E in
the 8250 is called (I set a breakpoint in VICE). The routine writes the
destination address to $04/05 (in $D318, $D31D). Then it tests for
"M-R"; no, thus, it executes

D328 20 A7 FA   JSR killp_rotection

This call does not return at all.

It executes the following routine:

FAA7          killp_rotection:
FAA7 48         PHA
FAA8 A9 01      LDA #$1
FAAA 8D AB 10   STA killp_flag
FAAD          killp00:
FAAD AD AB 10   LDA killp_flag
FAB0 D0 FB      BNE killp00
FAB2          LFAB2:
FAB2 68         PLA
FAB3 60         RTS

Obviously, it waits for the FDC to set killp_flag ($10AB) to 0, but this
never happens.

Looking at the ROM dump of the FDC 
(http://www.zimmers.net/anonftp/pub/cbm/firmware/drives/old/8050/d/8250romfdc.dis),
there is only one place with killp_flag is changed:

FFCF          LFFCF:
FFCF 4E AB 04   LSR killp_flag_fdc
FFD2 68         PLA
FFD3 85 82      STA io_riot80_pb_fdc
FFD5 68         PLA
FFD6 AA         TAX
FFD7 68         PLA
FFD8 40         RTI

Obviously, this is the end of an IRQ or an NMI routine. I suspect IRQ,
as $FF3F is the IRQ routine, and it is very nearby.

Perhaps, someone with more in-depth knowledge of the 8250 can help here?
Does this ring a bell for anyone?

Regards,
Spiro.

  "Anybody who would spend considerable effort emulating a C64 is not
  particularly sane to begin with; it is unreasonable to expect them to produce
  sane software."
  ("asuffield" in http://forums.thedailywtf.com/forums/p/7199/134136.aspx)

-- 
Spiro R. Trikaliotis                              http://opencbm.sf.net/
http://www.trikaliotis.net/                     http://www.viceteam.org/

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.