Mercurial > hg > Members > kono > nitros9-code
diff level2/modules/cc3io.asm @ 0:6641a883d6b0
Initial revision
author | boisy |
---|---|
date | Thu, 04 Apr 2002 16:34:12 +0000 |
parents | |
children | 2c13557a04d6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/modules/cc3io.asm Thu Apr 04 16:34:12 2002 +0000 @@ -0,0 +1,1187 @@ +******************************************************************** +* CC3IO - CoCo 3 I/O driver +* +* $Id$ +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ +* 16 Original OS-9 L2 Tandy distribution +* 26c Added support for obtaining monitor type from BGP 98/10/12 +* the init module +* 26d Added support for obtaining key repeat info BGP 98/10/23 +* from the init module + + nam CC3IO + ttl CoCo 3 I/O driver + +* Disassembled 98/09/09 08:29:24 by Disasm v1.6 (C) 1988 by RML + + ifp1 + use defsfile + use scfdefs + endc + +tylg set Drivr+Objct +atrv set ReEnt+rev +rev set 4 +edition set 26 + + mod eom,name,tylg,atrv,start,size + +u0000 rmb 1 +u0001 rmb 1 +u0002 rmb 1 +u0003 rmb 1 +u0004 rmb 1 +u0005 rmb 1 +u0006 rmb 3 +u0009 rmb 2 +u000B rmb 1 +u000C rmb 1 +u000D rmb 1 +u000E rmb 2 +u0010 rmb 6 +u0016 rmb 5 +u001B rmb 2 +u001D rmb 1 +u001E rmb 1 +u001F rmb 1 +u0020 rmb 2 +u0022 rmb 1 +u0023 rmb 1 +u0024 rmb 1 +u0025 rmb 1 +u0026 rmb 1 +u0027 rmb 1 +u0028 rmb 1 +u0029 rmb 1 +u002A rmb 1 +u002B rmb 1 +u002C rmb 1 +u002D rmb 2 +u002F rmb 1 +u0030 rmb 1 +u0031 rmb 2 +u0033 rmb 1 +u0034 rmb 1 +u0035 rmb 6 +u003B rmb 1 +u003C rmb 8 +u0044 rmb 4 +u0048 rmb 2 +u004A rmb 6 +u0050 rmb 6 +u0056 rmb 10 +u0060 rmb 1 +u0061 rmb 1 +u0062 rmb 1 +u0063 rmb 1 +u0064 rmb 1 +u0065 rmb 1 +u0066 rmb 1 +u0067 rmb 25 +u0080 rmb 24 +u0098 rmb 13 +u00A5 rmb 13 +u00B2 rmb 13 +u00BF rmb 7 +u00C6 rmb 26 +KeyEnt rmb 2 +KeyStat rmb 8 +JoyEnt rmb 2 +JoyStat rmb 8 +SndEnt rmb 2 +SndStat rmb 2 +u00F8 rmb 8 +size equ . + fcb $07 + +name fcs /CC3IO/ + fcb edition + +start lbra Init + lbra Read + lbra Write + lbra GetStat + lbra SetStat + +Term ldx <D.CCMem + cmpu <G.CurDev,x + bne L0056 + lbsr L0495 + cmpu <G.CurDev,x + bne L0056 + pshs u,x + ldx #$10EA + bsr TermSub + ldx #$10F4 + bsr TermSub + ldx #$10E0 + bsr TermSub + puls u,x + pshs cc + orcc #IRQMask + clra + clrb + std <G.CurDev,x + ldx <D.Clock + stx <D.AltIRQ + puls cc +L0056 ldb #$0C + lbra L0590 + +* Call terminate routine in subroutine module (KeyDrv/JoyDrv/SndDrv) +* X = addr in statics of entry +TermSub leau 2,x point U to static area for sub module + ldx ,x get entry pointer at ,X + jmp $03,x call term routine in sub module + +Init ldx <D.CCMem + ldd <G.CurDev,x + lbne L00EF + leax >CC3Irq,pcr Set up AltIRQ vector in DP + stx <D.AltIRQ + leax >L0495,pcr + pshs x + leax >L054C,pcr + tfr x,d + ldx <D.CCMem + std >G.MsInit,x + puls b,a + std >G.WindBk,x + stu <G.CurDev,x + lbsr L054C + + lda #$02 + sta G.CurTik,x + inc <G.Mouse+Pt.Valid,x + ldd #$0178 right mouse/time out value + std <G.Mouse+Pt.Actv,x + + ldd #$FFFF + std <G.LKeyCd,x + std <G.2Key2,x + ldd <D.Proc + pshs u,y,x,b,a + +* Added to allow patching for RGB/CMP/Mono and Key info - BGP +* Uses new init module format to get monitor type and key info + + ldy <D.Init get init module ptr + lda MonType,y get monitor type byte + sta <G.MonTyp,x save off +* Set key repeat rate/delay + ldd KeyRptS,y get key repeat start/delay constant + std <G.KyDly,x + + ldd <D.SysPrc + std <D.Proc + leax >KeyDrv,pcr + bsr LinkSys + sty >KeyEnt,u + leau >KeyStat,u + jsr ,y call init routine of sub module + leax >JoyDrv,pcr + bsr LinkSys + sty >JoyEnt,u + leau >JoyStat,u + jsr ,y call init routine of sub module + leax >SndDrv,pcr + bsr LinkSys + sty >SndEnt,u + leau >SndStat,u + jsr ,y call init routine of sub module + puls u,y,x,b,a + std <D.Proc +L00EF ldd #$0078 + std <u0028,u + ldd <IT.PAR,y get parity/baud bytes from dev desc + std <u001F,u save it off in our static + lbra L08AA + +KeyDrv fcs /KeyDrv/ +JoyDrv fcs /JoyDrv/ +SndDrv fcs /SndDrv/ + +LinkSys lda #Systm+Objct + os9 F$Link + ldu <D.CCMem + rts + +Read lda <u0024,u + lbne L0667 + leax >u0080,u + ldb <u0034,u + orcc #IRQMask + cmpb <u0033,u + beq L0138 + abx + lda ,x + bsr L0159 + stb <u0034,u + andcc #^(IRQMask!Carry) + rts +L0138 lda V.BUSY,u + sta V.WAKE,u + andcc #^IRQMask + ldx #$0000 + os9 F$Sleep + clr V.WAKE,u + ldx <D.Proc + ldb <P$Signal,x + beq Read + lda P$State,x + bita #Condem + bne L0157 + cmpb #S$Window + bcc Read +L0157 coma + rts + +L0159 incb + cmpb #$7F + bls L015F + clrb +L015F rts + +L0160 fdb $0801,$027f,$f8ff,$0000,$0801,$00bf,$f8ff,$0000 + +L0170 cmpd ,y + blt L017B + ldd ,y + bpl L017D + clra + clrb +L017B std ,y +L017D rts +L017E ldb #$01 + pshs u,y,x,b,a + ldb <u0063,u + beq L01E6 + lda <u0034,u + bita #$78 + beq L01DF + clr $01,s + lda #$01 + sta <u0067,u + lda #$08 + ldb #$03 + pshs b,a + leax >L0160,pcr + leay <u0056,u +L01A2 bita <u0034,u + beq L01C5 + lslb + lslb + tst <u0030,u + beq L01B1 + incb + bra L01BC +L01B1 tst <u0031,u + beq L01BC + addb #$02 + ldd b,x + bra L01C1 +L01BC ldb b,x + sex + addd ,y +L01C1 std ,y + ldd ,s +L01C5 lsla + decb + cmpb #$01 + bne L01CD + leay -$02,y +L01CD std ,s + bpl L01A2 + puls b,a + ldd #$027F + bsr L0170 + leay $02,y + ldd #$00BF + bsr L0170 +L01DF lda <u0065,u + bne L0223 + lda ,s +L01E6 tst <u0064,u + beq L0225 + clr <u0064,u + cmpa #$81 + bne L01FF + ldb <u0035,u + bne L0223 + ldx <u0020,u + com <$21,x + bra L0223 +L01FF cmpa #$82 + bne L0208 + lbsr L0485 + bra L0223 +L0208 cmpa #$83 + bne L0211 + lbsr L0495 + bra L0223 +L0211 cmpa #$84 + bne L0225 + ldb <u0035,u + bne L0223 + com <u0063,u + ldx <u0020,u + com <$2A,x +L0223 clr $01,s +L0225 ldb $01,s + puls pc,u,y,x,b,a +L0229 pshs x,b + leax <u003C,u + tst $02,x + lbeq L02C8 + leas -$05,s + tfr a,b + tst <u0063,u + bne L024E + ldb #$05 + lda $01,x + anda #$02 + sta ,s + beq L0248 + lslb +L0248 andb $05,s + tsta + beq L024E + lsrb +L024E clra + lsrb + rola + lsrb + std $01,s + bne L0276 + lda $05,x + beq L02C6 + bsr L02CA + beq L0262 + bsr L02D3 + beq L02AB +L0262 dec $05,x + bne L02AB + clra + clrb + sta >u00C6,u + std $06,x + std $0A,x + std $0C,x + std $0E,x + bra L02C6 +L0276 lda $02,x + sta $05,x + bsr L02CA + beq L02AB + bsr L02D3 + inc >$008A,x + ldd <$18,x + std <$12,x + ldd <$1A,x + std <$14,x + pshs u + ldu <u0020,u + lda <u0026,u + beq L02A9 + ldb <u0027,u + os9 F$Send + bcs L02A5 + clr <u0026,u +L02A5 clr >$008A,x +L02A9 puls u +L02AB ldd $0C,x + cmpa #$FF + beq L02B2 + inca +L02B2 cmpb #$FF + beq L02B7 + incb +L02B7 std $0C,x + ldd $06,x + cmpd #$FFFF + beq L02C4 + addd #$0001 +L02C4 std $06,x +L02C6 leas $05,s +L02C8 puls pc,x,b +L02CA ldd $08,x + eora $03,s + eorb $04,s + std $05,s + rts +L02D3 ldd $0C,x + tst $05,s + beq L02E9 + sta $0E,x + lda $03,s + bne L02E8 + lda $0A,x + cmpa #$FF + beq L02E6 + inca +L02E6 sta $0A,x +L02E8 clra +L02E9 tst $06,s + beq L02FD + stb $0F,x + ldb $04,s + bne L02FC + ldb $0B,x + cmpb #$FF + beq L02FA + incb +L02FA stb $0B,x +L02FC clrb +L02FD std $0C,x + ldd $03,s + std $08,x + ldd $05,s +L0305 rts + + +CC3Irq ldu <D.CCMem + ldy <G.CurDev,u + lbeq L044E + lda <G.TnCnt,u get tone counter + beq L0319 branch if zero + deca else decrement + sta <G.TnCnt,u and save back +L0319 leax <L0305,pcr + stx <D.AltIRQ + andcc #^(IntMasks) + ldb <$23,y + beq L0337 + lda $06,y + bpl L032F + lda G.GfBusy,u + ora G.WIBusy,u + bne L034F +L032F lda #$00 + lbsr L05DA + clr <$23,y +L0337 ldb G.CntTik,u + beq L034F + decb + stb G.CntTik,u + bne L034F + lda G.GfBusy,u + ora G.WIBusy,u + beq L034A + inc G.CntTik,u + bra L034F +L034A lda #$02 + lbsr L05DA +L034F lda <G.KyMse,u keyboard mouse? + bne L0369 branch if so + lda <G.MSmpRt,u + beq L0369 + deca + bne L0366 + pshs u,y,x + lbsr L0739 + puls u,y,x + lda <G.MSmpRV,u +L0366 sta <G.MSmpRt,u +L0369 clra + clrb + std <G.KySns,u + tst <G.KyMse,u + beq L0381 + ldx >$10E0 + leau >$00E2,u + jsr $06,x + ldu <D.CCMem + sta <G.KyButt,u +L0381 ldx >$10EA + leau >$00EC,u + jsr $06,x + ldu <D.CCMem + lda #$82 + cmpb #$80 + beq L0397 + inca + cmpb #$C0 + bne L039C +L0397 inc <G.Clear,u + bra L03C8 +L039C tst $08,y + bpl L03A8 + bitb #$03 + beq L03A8 + lda #$0D + bra L03C8 +L03A8 lda <G.KyButt,u + lbsr L0229 + tstb + lbne L044E + pshs u,y,x + ldx >$10E0 + leau >$00E2,u + jsr $09,x + puls u,y,x + bpl L03C8 + clr <G.LastCh,u + lbra L044E +L03C8 cmpa <G.LastCh,u + bne L03DF + ldb <G.KyRept,u + beq L044E + decb + beq L03DA +L03D5 stb <G.KyRept,u + bra L044E +L03DA ldb <u0062,u + bra L03ED +L03DF sta <u0027,u + ldb <u0061,u + tst <u0035,u + bne L03D5 + ldb <u0061,u +L03ED stb <u0029,u + lbsr L017E + beq L044E + ldb #$01 + stb >u00BF,u + ldu <u0020,u + ldb <u0033,u + leax >u0080,u + abx + lbsr L0159 + cmpb <u0034,u + beq L0411 + stb <u0033,u +L0411 sta ,x + beq L0431 + cmpa u000D,u + bne L0421 + ldx u0009,u + beq L0443 + sta $08,x + bra L0443 +L0421 ldb #$03 + cmpa u000B,u + beq L042D + ldb #$02 + cmpa u000C,u + bne L0431 +L042D lda u0003,u + bra L0447 +L0431 lda <u0024,u + beq L0443 + ldb <u0025,u + os9 F$Send + bcs L044E + clr <u0024,u + bra L044E +L0443 ldb #$01 + lda u0005,u +L0447 beq L044E + clr u0005,u + os9 F$Send +L044E ldu <D.CCMem + lda <G.AutoMs,u + beq L046B + lda <G.MseMv,u + ora <G.Mouse+Pt.CBSA,u + beq L046B + lda G.GfBusy,u + ora G.WIBusy,u + bne L046B + lda #$03 + lbsr L05DA + clr <G.MseMv,u +L046B orcc #IntMasks + leax >CC3Irq,pcr + stx <D.AltIRQ + rts + +L0474 stb $06,s + ldx <u0024 + lda $0D,x + ldb #$09 + mul + ldy <u0080 + leax d,y + stx $07,s + rts +L0485 pshs u,y,x,b,a + leas <-$11,s + ldb #$09 + bsr L0474 + stx $09,s + sty $07,s + bra L04A7 +L0495 pshs u,y,x,b,a + leas <-$11,s + ldb #$F7 + bsr L0474 + leay -$09,y + sty $09,s + leax -$09,x + stx $07,s +L04A7 ldx <D.CCMem + ldu <$20,x + lbeq L0546 + ldx u0001,u + stx $0B,s + stx $0F,s + ldd ,x + std $0D,s +L04BA ldx $0F,s +L04BC ldb $04,s + leax b,x + cmpx $09,s + bne L04C6 + ldx $07,s +L04C6 stx $0F,s + ldd ,x + cmpd $0D,s + bne L04BC + ldu $02,x + beq L04BC + cmpx $0B,s + beq L0541 + lda <u001E,u + beq L04BA + ldx <u0016,u + beq L0536 + lda u0003,u + beq L0536 + ldy <u0048 + lda a,y + beq L0536 + clrb + tfr d,y + lda >$00AC,y + leay <$30,y + sta ,s + pshs x +L04FA ldb #$10 + lda ,x +L04FE decb + cmpa b,y + beq L050F + tstb + bne L04FE + ldx <$3D,x + bne L04FA + puls x + bra L0536 +L050F puls x + lda ,s +L0513 sta ,s + cmpa #$02 + bhi L051F + ldb #$02 + lda b,y + bra L0522 +L051F lda a,y + clrb +L0522 cmpa ,x + beq L0536 + decb + bmi L052D + lda b,y + bra L0522 +L052D lda ,s + ldx <$3D,x + bne L0513 + bra L04BA +L0536 ldx <D.CCMem + stu <$20,x + clr $0A,x + clr >$00BF,x +L0541 inc <u0023,u + bsr L054C +L0546 leas <$11,s + clrb + puls pc,u,y,x,b,a +L054C pshs x + ldd <u0028,u + ldx <D.CCMem + sta <$3B,x + sta <$60,x + stb <$3E,x + ldd <u002A,u + sta <$63,x + stb <$66,x + lda u0006,u + sta $0B,x + clra + puls pc,x + +Write ldb <u002C,u + lbne L0600 + sta <u001F,u + cmpa #C$SPAC space or higher? + bcc L058E + cmpa #$1E $1E escape code? + bcc L05EF + cmpa #$1B $1B escape code? + beq L05F3 + cmpa #$05 $05 escape code? + beq L05F3 + cmpa #C$BELL Bell? + bne L058E + jmp [>WGlobal+G.BelVec] + +L058E ldb #$03 1st entry point in co-module +L0590 lda <u001F,u +L0593 ldx <D.CCMem + stu G.CurDvM,x +L0597 pshs a + leax <G.CoTble,x + lda <u001D,u + ldx a,x + puls a + beq L05EB + leax b,x + bsr L05C0 + ldb <u001D,u + beq L05B4 + jsr ,x + +L05B0 pshs cc + bra L05BB +L05B4 jsr ,x +L05B6 pshs cc + clr >WGlobal+G.WIBusy +L05BB clr >WGlobal+G.CrDvFl + puls pc,cc + +L05C0 pshs x,b + ldx <D.CCMem + clr G.WIBusy,x + ldb <u001D,u + bne L05CE + incb + stb G.WIBusy,x +L05CE clr G.CrDvFl,x + cmpu <G.CurDev,x + bne L05D8 + inc g000A,x +L05D8 puls pc,x,b + +L05DA pshs u,y,x + ldu <u0020,u +L05DF ldb #$0F + ldx <D.CCMem + bsr L0597 + puls pc,u,y,x +L05E7 pshs u,y,x + bra L05DF +L05EB comb + ldb #E$MNF + rts + +L05EF cmpa #$1E + beq L05FE +L05F3 leax <L058E,pcr + ldb #$01 + stx <u002D,u + stb <u002C,u +L05FE clrb + rts + +L0600 ldx <u0031,u + sta ,x+ + stx <u0031,u + decb + stb <u002C,u + bne L05FE + ldx <D.CCMem + bsr L05C0 + stu G.CurDvM,x + ldx <u002F,u + stx <u0031,u + ldb <u001D,u + beq L0624 + jsr [<u002D,u] + bra L05B0 +L0624 jsr [<u002D,u] + bra L05B6 + +GetStat cmpa #SS.EOF + beq SSEOF + ldx PD.RGS,y + cmpa #SS.ComSt + beq GSComSt + cmpa #SS.Joy + beq GSJoy + cmpa #SS.Mouse + lbeq GSMouse + cmpa #SS.Ready + beq GSReady + cmpa #SS.KySns + beq GSKySns + cmpa #SS.Montr + beq GSMontr + ldb #$06 2nd entry point in co-module + lbra L0593 + +* SS.ComSt - get baud/parity info +GSComSt lda V.TYPE,u + clrb + std R$Y,x + rts + +GSReady ldb <u0033,u + cmpb <u0034,u + beq L0667 + bhi L0660 + addb #$80 +L0660 subb <u0034,u + stb $02,x +SSEOF clrb + rts +L0667 comb + ldb #E$NotRdy + rts + +GSKySns ldy <D.CCMem + clrb + cmpu <G.CurDev,y + bne L0678 + ldb <G.KySns,y +L0678 stb R$A,x + clrb + rts + +* GetStat: SS.Montr (get Monitor type) +GSMontr ldb >WGlobal+G.MonTyp get monitor type + tfr b,a put in A + std $04,x save in caller's X + rts + +* GetStat: SS.JOY (get joystick X/Y/button values) +GSJoy clrb + tfr x,y + ldx <D.CCMem + cmpu <$20,x is this win device same as current? + beq L0697 branch if so + clra else D = 0 + std $04,y + std $06,y + sta $01,y + rts +L0697 ldx >$10EA + pshs u + ldu <D.CCMem + leau >$00EC,u + jsr $0C,x + puls u + lda $05,y + beq L06AB + lsrb +L06AB andb #$05 + lsrb + bcc L06B2 + orb #$01 +L06B2 stb $01,y + pshs y + lda $05,y + inca + ldy #$0000 + pshs u + ldu <D.CCMem + ldx >$10EA + leau >$00EC,u + jsr $0F,x + puls u + pshs y + ldy $02,s + stx $04,y + ldd #$003F + subd ,s++ + std $06,y + clrb + puls pc,y + +* GetStat: SS.Mouse (get mouse info) +GSMouse pshs u,y,x + ldx <D.CCMem + cmpu <$20,x is caller in current window? + beq L06FA branch i so + ldy ,s + ldb #$20 size of packet +L06EC clr ,-s + decb + bne L06EC + leax ,s + bsr L0729 + leas <$20,s + puls pc,u,y,x +* here the caller is in the current window +L06FA tst <$63,x + bne L071A + lda <$60,x + bne L071A + pshs u,y,x + bsr L073B + puls u,y,x + lda <$66,x + anda <$67,x + beq L071A + lda #$03 + lbsr L05E7 + clr <$67,x +L071A lda #$01 + lbsr L05E7 + leax <$3C,x + ldy ,s + bsr L0729 + puls pc,u,y,x +L0729 ldu $04,y + ldy <D.Proc + ldb P$Task,y + clra + ldy #32 + os9 F$Move + rts +L0739 ldx <D.CCMem +L073B leax <$3C,x + clra + ldb <$17,x + tfr d,y + lda $01,x + pshs u,y,x,b,a + ldx >$10EA + ldu <D.CCMem + leau >$00EC,u + jsr $09,x + pshs y,x + ldx $06,s + puls b,a + leay <$18,x + bsr L0764 + puls b,a + bsr L0764 + puls pc,u,y,x,b,a +L0764 cmpd ,y++ + beq L0770 + std -$02,y + lda #$01 + sta <$2B,x +L0770 rts + +SSTone ldx >$10F4 + jmp $06,x + +SSAnPal ldx >$10F4 + jmp $09,x + +* Y = addr of path desc +SetStat ldx PD.RGS,y + cmpa #SS.ComSt + lbeq SSComSt + cmpa #SS.Montr + lbeq SSMontr + cmpa #SS.KySns + lbeq SSKySns + cmpa #SS.Tone + beq SSTone + cmpa #SS.AnPal + beq SSAnPal + cmpa #SS.SSig + beq SSSig + cmpa #SS.MsSig + beq SSMsSig + cmpa #SS.Relea + beq SSRelea + cmpa #SS.Mouse + beq SSMouse + cmpa #SS.GIP + lbeq SSGIP + cmpa #SS.Open + bne L07B5 +SSOpen ldx PD.DEV,y + stx u0001,u +L07B5 ldb #$09 3rd entry point in co-module + lbra L0593 + +* SS.SSig - send signal on data ready +SSSig pshs cc + clr <u0024,u + lda <u0034,u + suba <u0033,u + pshs a + bsr L07EC + tst ,s+ + bne L07F7 + std <u0024,u + puls pc,cc + +* SS.MsSig - send signal on mouse button +SSMsSig pshs cc + clr <u0026,u + bsr L07EC + ldx <D.CCMem + cmpu <G.CurDev,x + bne L07E7 + tst >G.MsSig,x + bne L07F3 +L07E7 std <u0026,u + puls pc,cc +L07EC orcc #IntMasks + lda PD.CPR,y get curr proc # + ldb R$X+1,x get user signal code + rts +L07F3 clr >G.MsSig,x +L07F7 puls cc + os9 F$Send + rts + +* SS.Relea - release a path from SS.SSig +SSRelea lda PD.CPR,y get curr proc # + cmpa <u0024,u same as keyboard? + bne L0807 branch if not + clr <u0024,u +L0807 cmpa <u0026,u same as mouse? + bne L0871 + clr <u0026,u + rts + +* SS.Mouse - set mouse sample rate and button timeout +SSMouse ldd R$X,x + cmpa #$FF + beq L0819 + sta <u0028,u +L0819 cmpb #$FF + beq L0820 + stb <u0029,u +L0820 ldb R$Y+1,x + stb <u002B,u + ldy <D.CCMem + cmpu <G.CurDev,y + bne L083D + stb <G.AutoMs,y + ldd <u0028,u + sta <G.MSmpRV,y + sta <G.MSmpRt,y + stb <G.Mouse+Pt.ToTm,y +L083D clrb + rts + +* SS.GIP +SSGIP ldy <D.CCMem + cmpu <G.CurDev,y current window? + bne L0866 branch if not + ldd R$Y,x get caller's Y (key repeat info) + cmpd #$FFFF unchanged? + beq L0853 yes, don't change current key info + std <G.KyDly,y else save key delay and speed info +L0853 ldd R$X,x get mouse info + cmpa #$01 set for hi res adapter? + bgt L088F branch to error if greater + sta <G.Mouse+Pt.Res,y +* B = mouse port (1 = right, 2 = left) + tstb + beq L088F + cmpb #$02 + bgt L088F + stb <G.Mouse+Pt.Actv,y +L0866 clrb + rts + +* SS.KySns - setstat??? +SSKySns ldd R$X,x + beq L086E + ldb #$FF +L086E stb <u0022,u +L0871 clrb + rts + +* SS.Montr - change monitor type +SSMontr ldd R$X,x + cmpd #$0002 + bhi L088F + lda <D.VIDMD + anda #$EF + bitb #$02 + beq L0885 + ora #$10 +L0885 sta <D.VIDMD + stb >WGlobal+G.MonTyp + inc <u0023,u + clrb + rts +L088F comb + ldb #E$IllArg + rts + +* SS.ComSt - set baud/parity params +SSComSt ldd R$Y,x + eora u0006,u + anda #$80 + bne L088F + lda R$Y,x + bsr L08AA + lbcc L07B5 + rts + +VDGInt fcs /VDGInt/ + +L08AA sta u0006,u + bmi L08C3 if hi-bit if A is set, we're a window + pshs u,y,a ..else VDG + lda #$02 + sta <u001D,u + leax <VDGInt,pcr + bsr L08D4 + puls pc,u,y,a + +WindInt fcs /WindInt/ + +L08C3 pshs u,y + clra + sta <u001D,u + leax <WindInt,pcr + lda #$80 + bsr L08D4 + puls pc,u,y +L08D2 clrb + rts +L08D4 ldb <u002F,u + bne L08D2 + pshs u + ldu <D.CCMem + bita <G.BCFFlg,u + puls u + bne L0900 + tsta + bpl L08E8 + clra +L08E8 pshs y,a + bsr L0905 + bcc L08F0 + puls pc,y,a +L08F0 puls a + ldx <D.CCMem + leax <G.CoTble,x + sty a,x + puls y + cmpa #$02 + bgt L08D2 +L0900 ldb #$00 + lbra L0590 +L0905 ldd <D.Proc + pshs u,x,b,a + ldd <D.SysPrc + std <D.Proc + lda #Systm+Objct + os9 F$Link + ldx $02,s + bcc L091B + ldu <D.SysPrc + os9 F$Load +L091B puls u,x,b,a + std <D.Proc + lbcs L05EB + rts + + emod +eom equ * + end +