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