[net.micro.6809] CCIO Bugs

pete@wlbreng1.UUCP (Pete_Lyall) (07/03/86)

<lineeaterfood>

This is the patch for CCIO version 2.00.00. Unfortunately, it must be
loaded as a module (preferably in the boot file, as that will take
less space than loading/executing later..). This corrects the problems
of NOT being able to regularly detect a QUIT or INTERRUPT from the
main (COCO) console. I am merely relaying the information - I assume
no credit for the development of this patch...     Pete Lyall



**********************************
* Patch for CCIO 2.0             *
* Sets sys state before F$Send   *
* By Kevin K Darling March 1986  *
*  with Kent Meyer's suggestions *
*    os9sig version 3 - 5/07/86  *
*    last version was - 4/17/86  *
*                                *
* load ; then 'cciop'            *
* put in bootfile for safety     *
**********************************
 IFP1
 USE /d0/DEFS/DEFSFILE
 ENDC

 MOD len,name,prgrm+objct,reent+1,setup,msiz

ptchadd equ $014B patch address in CCIO

stack RMB 200
msiz EQU .

name fcs "CCIOP"
ccio fcs "CCIO"

setup equ * Set Up New ccio Brk key hit:
 leax ccio,pc find the CCIO module
 lda #drivr+objct
 OS9 F$Link return addrss in U
 bcs err1
 leau ptchadd,u offset into CCIO
 leax newbrk,pc X=patch code addrss
 orcc #IntMasks stop interrupts
 lda #$7E A='jmp' code
 sta ,u store patch jump
 stx 1,u
 andcc #$AF enable interrupts
 clrb okay
err1
 OS9 F$Exit end patch install.

* -----------------------------------------
* Break/Shift-Brk Comes Here From CCIO:

newbrk
 pshs cc,a,b,dp,x,y,u save regs
 orcc #IntMasks stop interrupts
 ldx >D.Proc any proc?
 beq syst ..no, idle sys state
 tst P$State,x sys state?
 bpl user ..no, user

syst
 puls cc,a,b,dp,x,y,u was sys state
 lda V.LPRC,u get last ccio user
 beq syst.no
 OS9 F$Send send the signal
syst.no
 bra brkend ..continue

user
 leay user2,pc come back here
 jmp [D.URtoSs] make sys state [$0084]
user2
 ldu R$U,s retrieve static mem
 ldb R$B,s  and signal
 lda V.LPRC,u get last user id
 beq user.no
 OS9 F$Send send signal while sysstate
user.no
 ldx >D.Proc then make user again:
 ldb P$State,x drop sys state
 andb #$7F   (Not SysState)
 stb P$State,x
 ldd P$SWI2,x reset user svc
 std >D.SWI2
 ldd >D.UsrIRQ & irq vectors
 std >D.SvcIRQ
 puls cc,a,b,dp,x,y,u restore regs

brkend
 clr V.Wake,u clear wake id flag
 jmp [D.Clock] do timesharing...

 emod
len equ *
 end