Mercurial > hg > Members > kono > nitros9-code
changeset 400:15d9dbd6a0e4
Added IRQ and sleep versions of Disto's no halt floppy controller's drvier.
author | tlindner |
---|---|
date | Wed, 28 Aug 2002 04:57:20 +0000 |
parents | 3ccac8049e18 |
children | bc2fb1daef5d |
files | 3rdparty/drivers/disto/cc3disk_sc2_irq.asm 3rdparty/drivers/disto/cc3disk_sc2_slp.asm |
diffstat | 2 files changed, 630 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3rdparty/drivers/disto/cc3disk_sc2_irq.asm Wed Aug 28 04:57:20 2002 +0000 @@ -0,0 +1,625 @@ +******************************************************************** +* CC3Disk - Disto No Halt Super Controller II disk driver +* +* This driver their interrupt driven driver. It is a no halt +* (multitasking) disk driver that uses interrupts. Care must be +* taken that no other hardware will conflict. +* +* $Id$ +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ +* 02 Fist disassembled tjl 02/08/27 + + nam CC3Disk + ttl os9 device driver + +* Disassembled 02/08/27 11:42:37 by Disasm v1.6 (C) 1988 by RML + +* Disto's Super Controller II supports two locations for its +* registers: $FF74 and $FF58 + +nh_base equ $FF74 +nh_stat equ nh_base +nh_data equ nh_base+2 + + ifp1 + use os9defs + endc +tylg set Drivr+Objct +atrv set ReEnt+rev +rev set $02 + mod eom,name,tylg,atrv,start,size +u0000 rmb 1 +u0001 rmb 1 +u0002 rmb 1 +u0003 rmb 1 +u0004 rmb 1 +u0005 rmb 2 +u0007 rmb 1 +u0008 rmb 2 +u000A rmb 4 +u000E rmb 1 +u000F rmb 1 +u0010 rmb 2 +u0012 rmb 1 +u0013 rmb 31 +u0032 rmb 24 +u004A rmb 6 +u0050 rmb 48 +u0080 rmb 10 +u008A rmb 8 +u0092 rmb 16 +u00A2 rmb 5 +u00A7 rmb 8 +u00AF rmb 2 +u00B1 rmb 11 +u00BC rmb 1 +u00BD rmb 1 +size equ . + fcb $FF +name equ * + fcs /CC3Disk/ + fcb $A3 # +start equ * + lbra L0046 + lbra L00BF + lbra L013B + lbra L00BC + lbra L0370 + leay >u00B1,u + ldx #$0000 + os9 F$VIRQ + os9 F$IRQ + ldy #nh_data + os9 F$IRQ + clrb + stb >$FF40 + stb <u0032 + rts +L0040 fcb $00 + fcb $01 + fcb $09 +L0043 fcb $80 suba #$80 This doesn't make sense. + fcb $80 + fcb $10 fcb $10 +L0046 clr >nh_data + clr <u0032 + ldx #$FF48 + lda #$D0 + sta ,x + lbsr L033A + lda ,x + lda #$FF + sta >u00A7,u + ldb #$04 + leax u000F,u +L0061 sta ,x + sta <$15,x + leax <$26,x + decb + bne L0061 + leax >L023C,pcr + stx $FC + pshs u + leau >u00A7,u + leay u000E,u + tfr y,d + leay >L0489,pcr + leax >L0040,pcr + os9 F$IRQ + puls u + bcs L00BD + lda >$FF7F + sta >u00BC,u + ldd #nh_data + leay >L01F7,pcr + leax >L0043,pcr + os9 F$IRQ + bcs L00BD + pshs cc + orcc #$50 + lda >$FF23 + anda #$FC + sta >$FF23 + lda >$FF22 + lda <u0092 + ora #$01 + sta <u0092 + sta >$FF92 + puls cc +L00BC clrb +L00BD rts +L00BE rts +L00BF lbsr L0263 + clr u0003,u + ldd <u0010,u + bne L0113 + bsr L0113 + bcs L00BE + lda <$23,y + bita #$40 + lbne L04B0 + ldx $08,y + pshs y,x + ldy <$1E,y + ldb #$14 +L00E0 lda b,x + sta b,y + decb + bpl L00E0 + lda <$10,y + ldy $02,s + ldb <$24,y + bita #$02 + beq L00F8 + bitb #$01 + beq L010E +L00F8 bita #$04 + beq L0100 + bitb #$02 + beq L010E +L0100 bita #$01 + beq L010B + lda <$27,y + suba #$02 + bcs L010E +L010B clrb + puls pc,y,x +L010E comb + ldb #$F9 + puls pc,y,x +L0113 lbsr L02D3 + bcs L00BE + ldb #$80 + lda #$07 + lbsr L0199 + lbcs L025F + ldx $08,y + ldb #$80 + tst u0003,u + bne L0138 + pshs b +L012D ldd >nh_stat + std ,x++ + dec ,s + bne L012D + puls b +L0138 andcc #$FE + rts +L013B lbsr L0263 +L013E bsr L014D + bcs L014C + tst <$28,y + bne L014B + bsr L0171 + bcs L013E +L014B clrb +L014C rts +L014D lbsr L02D3 + bcs L014C + ldx $08,y + lda #$04 + sta >nh_data + ldb #$80 + pshs b +L015D ldd ,x++ + std >nh_stat + dec ,s + bne L015D + puls b + ldb #$A0 + lda #$06 + bsr L0199 + lbra L0240 +L0171 lda u0004,u + pshs a + clr u0004,u + lda #$FF + sta u0003,u + lbsr L0113 + bcs L0194 + pshs b +L0182 ldd >nh_stat + cmpd ,x++ + bne L0190 + dec ,s + bne L0182 + bra L0192 +L0190 orcc #$01 +L0192 puls b +L0194 puls a + sta u0004,u + rts +L0199 std u0008,u +L019B ldd u0008,u + bsr L01B8 + lbsr L0240 + bcc L01B7 + lda >$FF48 + bita #$40 + bne L01B6 + lsr u0004,u + beq L01B6 + bcc L019B + lbsr L0346 + bra L019B +L01B6 coma +L01B7 rts +L01B8 pshs a + lda <u0050 + sta >-u00A2,u + puls a + stb >$FF48 + ora #$08 + sta >nh_data + ldb #$28 + orb u0001,u + stb >$FF40 + pshs x + bra L01E5 +L01D5 ldx <u0050 + lda $0C,x + ora #$08 + sta $0C,x + andcc #$AF + ldx #$0001 + lbsr L0424 +L01E5 orcc #$50 + lda >-u00A2,u + bne L01D5 + clrb + ldb #$04 + stb >nh_data + andcc #$AF + puls pc,x +L01F7 lda u0005,u + beq L0233 + ldb >$FF7F + stb >u00BD,u + ldb >u00BC,u + stb >$FF7F + ldb #$D0 + stb >$FF48 + ldb #$04 + stb >nh_data + ldb <u00AF + andb #$FE + stb <u00AF + ldb <u0092 + andb #$FE + stb >$FF92 + orb #$01 + stb >$FF92 + clrb + stb u0005,u + tfr d,x + lda $0C,x + anda #$F7 + sta $0C,x + clrb + bra L0234 +L0233 comb +L0234 lda >u00BD,u + sta >$FF7F + rts +L023C leas $0C,s + puls y,cc +L0240 ldb >$FF48 + clr >nh_data + andb #$F8 + beq L0258 + pshs x + leax <L0259,pcr +L024F leax $01,x + rolb + bcc L024F + ldb ,x + puls pc,x +L0258 clrb +L0259 rts + fcb $F6 + fcb $F2 + fcb $F5 + fcb $F7 + fcb $F3 +L025F comb + ldb #$F4 + rts +L0263 leau >u00A7,u + clr u0007,u + lda #$91 + sta u0004,u + tstb + bne L027F + tfr x,d + std <u0010,u + beq L02A1 + ldx <$1E,y + cmpd $01,x + bcs L0285 +L027F comb + ldb #$F1 + leas $02,s + rts +L0285 clr ,-s + bra L028B +L0289 inc ,s +L028B subd <$11,x + bcc L0289 + addd <$11,x + lda <$10,x + lsra + bcc L029F + lsr ,s + bcc L029F + inc u0007,u +L029F puls a +L02A1 std u0005,u + clrb + rts +L02A5 clr u0002,u + lda <$21,y + cmpa #$04 + bcs L02B2 + comb + ldb #$F0 + rts +L02B2 pshs x,b,a + cmpa ,u + beq L02BA + com u0002,u +L02BA sta ,u + leax <L02C8,pcr + ldb a,x + stb u0001,u + lbsr L043E + puls pc,x,b,a +L02C8 oim #$02,<u0004 + nega +L02CC pshs a + ldb <$15,x + bra L030A +L02D3 lbsr L02A5 + bcs L032D + ldd u0005,u + pshs a + lda u0007,u + beq L02E6 + lda u0001,u + ora #$40 + sta u0001,u +L02E6 lda <$23,y + bita #$02 + bne L02EE + incb +L02EE stb >$FF4A + ldx <$1E,y + ldb <$15,x + lda <$10,x + lsra + eora <$24,y + anda #$02 + pshs a + lda $01,s + tst ,s+ + beq L030A + lsla + lslb +L030A stb >$FF49 + tst u0002,u + bne L0318 + ldb ,s + cmpb <$15,x + beq L0324 +L0318 sta >$FF4B + ldb <$22,y + andb #$03 + eorb #$1B + bsr L032E +L0324 puls a + sta <$15,x + sta >$FF49 + clrb +L032D rts +L032E lda #$04 + lbsr L01B8 + lda >$FF48 + clr >nh_data + rts +L033A clr <u0012,u + inc <u0012,u +L0340 rol <u0012,u + bpl L0340 + rts +L0346 pshs x,b + lbsr L02A5 + bcs L036E + ldx <$1E,y + clr <$15,x + lda #$04 +L0355 ldb <$22,y + andb #$03 + eorb #$4B + pshs a + bsr L032E + puls a + deca + bne L0355 + ldb <$22,y + andb #$03 + eorb #$0B + bsr L032E +L036E puls pc,x,b +L0370 leau >u00A7,u + ldx $06,y + ldb $02,x + cmpb #$04 + beq L0384 + cmpb #$03 + beq L0346 + comb + ldb #$D0 + rts +L0384 pshs u,y + ldd #$1A00 + os9 F$SRqMem + lbcs L03E2 + ldx $02,s + stu <$13,x + ldx <u0050 + lda $06,x + ldb $D0 + ldy ,s + ldx $06,y + ldx $04,x + ldy #$1A00 + os9 F$Move + bcs L03D3 + puls u,y + pshs u,y + lbsr L02A5 + bcs L03D3 + ldx $06,y + ldb $07,x + bitb #$01 + beq L03C4 + lda u0001,u + ora #$40 + sta u0001,u + sta u0007,u +L03C4 lda $09,x + ldx <$1E,y + lbsr L02CC + bcs L03D3 + ldx <u0013,u + bsr L03E4 +L03D3 ldu $02,s + pshs b,cc + ldu <u0013,u + ldd #$1A00 + os9 F$SRtMem + puls b,cc +L03E2 puls pc,u,y +L03E4 pshs y,cc + orcc #$50 + ldb #$F0 + stb >$FF48 + ldy #$FFFF + ldb #$28 + orb u0001,u + stb >$FF40 + orb #$A8 + lda #$02 + lbsr L033A +L03FF bita >$FF48 + bne L041A + leay -$01,y + bne L03FF + lda u0001,u + ora #$08 + sta >$FF40 + lda #$D0 + sta >$FF48 + puls y,cc + comb + ldb #$F5 + rts +L041A lda ,x+ + sta >$FF4B + stb >$FF40 + bra L041A +L0424 pshs b,a + ldd <u0050 + cmpd <u004A + puls b,a + beq L0433 + os9 F$Sleep + rts +L0433 ldx #$A000 +L0436 nop + nop + nop + leax -$01,x + bne L0436 + rts +L043E pshs y,x,b,a + ldd #$00F0 + std u000A,u + lda u0001,u + ora #$08 + sta >$FF40 + ldx #$0028 + lda <u0032 + bmi L046B + beq L0469 + tst u0002,u + beq L046D + lda <$23,y + bita #$10 + beq L046D + bsr L0424 + ldd #$00F0 + std u000A,u + bra L046D +L0469 bsr L0424 +L046B bsr L0470 +L046D clrb + puls pc,y,x,b,a +L0470 lda #$01 + sta <u0032 + ldx #$0001 + leay u000A,u + clr $04,y + ldd #$00F0 + os9 F$VIRQ + bcc L0487 + lda #$80 + sta <u0032 +L0487 clra + rts +L0489 pshs a + lda >-u00A2,u + beq L049F + ldb #$0C + stb >nh_data + lda #$D8 + sta >$FF48 + clr u0004,u + bra L04A3 +L049F lda <u008A + beq L04A7 +L04A3 bsr L0470 + bra L04AE +L04A7 sta >$FF40 + clr u000E,u + clr <u0032 +L04AE puls pc,a +L04B0 ldx <$1E,y + ldb #$14 +L04B5 clr b,x + decb + bpl L04B5 + ldb <$26,y + lda <$27,y + mul + subd #$0001 + lda <$2A,y + sta $03,x + sta <$12,x + mul + addd <$2B,y + std $01,x + lda #$07 + sta $0D,x + lda <$24,y + lsla + pshs a + lda <$27,y + deca + ora ,s+ + sta <$10,x + clrb + rts + emod +eom equ *
--- a/3rdparty/drivers/disto/cc3disk_sc2_slp.asm Wed Aug 28 03:57:01 2002 +0000 +++ b/3rdparty/drivers/disto/cc3disk_sc2_slp.asm Wed Aug 28 04:57:20 2002 +0000 @@ -1,11 +1,15 @@ ******************************************************************** * CC3Disk - Disto No Halt Super Controller II disk driver * +* This driver their 'sleep' driver. It is a no halt (multitasking) +* disk driver, but it does not use interrupts. Thus it is safe to use +* this driver with other hardware uses interrupts. +* * $Id$ * * Ed. Comments Who YY/MM/DD * ------------------------------------------------------------------ -* 02 None. +* 02 Fist disassembled tjl 02/08/27 nam CC3Disk ttl os9 device driver