[Coco] Modifying Level1/coco1 for 6309 native mode

Luis Antoniosi (CoCoDemus) retrocanada76 at gmail.com
Tue Jan 7 19:46:51 EST 2014


Great now it hangs on the first F$Fork on sysgo.

On Mon, Jan 6, 2014 at 5:45 PM, Robert Gault <robert.gault at att.net> wrote:
> Luis Antoniosi (CoCoDemus) wrote:
>>
>> Robert,
>>
>> In my first tests the system hangs at the firs I$Write on sysgo to
>> display NitrOS system name.
>>
>> put a 'TST $FF78' before it and you will trace it using 'wp ff78,1,rw'
>> on debug window.
>>
>
> Excellent Luis!
>
> The problem actually is in scf.asm which is where I$Write is located. It
> looks to me as though this is a generic issue and could be found in many
> other modules and commands. Here is the bias used in the NitrOS-9 scf code.
>
>  IFGT  Level-1
>   IFNE DH6309
>   ELSE
>   ENDC
>  ELSE
>  ENDC
>
> Note the assumption is that a 6309 cpu will exist only for Level2 and
> therefore only in a Coco3. We are going to be forced to go through the
> source code looking for such constructions.
>
> Now specifically in scf.asm and I$Write, the following change (and it is
> pretty ugly at the moment) gets one further through the boot process.
>
> * Get new block of data to write into [PD.BUF]
> * Only allows up to 32 bytes at a time, and puts them in the last 32 bytes
> of
> * the 256 byte [PD.BUF] buffer. This way, can use TFR U,D/TSTB to see if
> fin-
> * inshed
> L04F1    pshs  y,x            Save write offset & path descriptor pointer
>          tfr   x,d            Move data offset to D
>          ldu   PD.RGS,y       Get register stack pointer
>          ldx   R$X,u          Get pointer to users's WRITE string
>          IFNE  H6309
>          addr  d,x            Point to where we are in it now
>          ldw   R$Y,u          Get # chars of original write
>          subr  d,w            Calculate # chars we have left to write
>          cmpw  #64            More than 64?
>          bls   L0508          No, go on
>          ldw   #64            Max size per chunk=64
> L0508    ldd   PD.BUF,y       Get buffer ptr
>          inca                 Point to PD.BUF+256 (1 byte past end
>          subr  w,d            Subtract data size
>          ELSE
>          leax  d,x
>          ldd   R$Y,u
>          subd  ,s
>          cmpd  #$0020
>          bls   L0508
>          ldd   #$0020
> L0508    pshs  d
>          ldd   PD.BUF,y
>          inca
>          subd  ,s
>          ENDC
>          tfr   d,u            Move it to U
>          lda   #C$CR          Put a carriage return 1 byte before start
>          sta   -1,u           of write portion of buffer
> * This next section corrects the "6309 only in Level2" assumption.
> * The code is indented to attempt to make it readable.
>          IFGT  Level-1
>           ldy   <D.Proc        Get current process pointer
>           lda   P$Task,y       Get the task number
>           ldb   <D.SysTsk      Get system task number
>           IFNE  H6309
>            tfr   w,y            Get number of bytes to move
>           ELSE
>            puls  y
>           ENDC
>           os9   F$Move         Move data to buffer
>          ELSE
> * This acknowledges that a 6309 cpu might exist in a coco1 or coco2.
>           IFNE  H6309
>            pshs  u
>            tfm   x+,u+
>            puls  u
>           ELSE
>            puls  y
>            pshs  u
> L0509      lda   ,x+
>            sta   ,u+
>            leay  -1,y
>            bne   L0509
>            puls  u
>           ENDC
>          puls  y,x            Restore path descriptor pointer and data
> offset
>
> Now you get the initial login screen message.
>
> Robert
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco



-- 
Long live the CoCo



More information about the Coco mailing list