.if .not .def _OS_

_OS_ = 1   

   .if .not .def _SYSTEM_
      .include #system
   .endif
   .if .not .def _MACROS_
      .include #macros
   .endif
   
;; -------------------------------------------------------------
;; Use this macro to install a handler into the 
;; device table.
;; Call it with:
;;    IHATABS  deviceID,table,overwriteflag[,select]
;; Afterwards CARRY SET will signal failure!
;; -------------------------------------------------------------
   .macro IHATABS
@3    .= @p1+@p2
      .if %0=4
@3       .= %4
      .endif
      
      @moad  %1,[@3 & @p1] / @p1 ;; load dev ID
      jsr  fhatabs              ;; find hatabs

      .if %3
         bne  error
      .else
         bcs  error
      .endif

      sta     hatabs,y
      @dmoke_y %2,hatabs+1,[ @3 & @p1] / @p1

      .if %3
         .byte $A9   ; make it a lda #..
error    sec
      .else
         clc
error
      .endif       
   .endm

   .macro SELECT_DRIVE
@3    .= @p1
      .if %0 = 2
@3       .= %2
      .endif
      @moke %1,dunit,[@3 & @p1]
   .endm
      
   .macro READSECTOR
@3    .= @p1 ! @p2 ! @p3 
      .if %0 = 4
@3       .= %4
      .endif
      .if .not [@3 & @special]      
         poke  dcomnd,'R
      .endif
      @dmoke %1,daux1,[@3 & @p1]
      @dmoke %2,dbytlo,[@3 & @p2] / @p2
      @dmoke %3,dbuflo,[@3 & @p3] / @p3
      jsr   dskinv
   .endm

   .macro WRITESECTOR
@3    .= @p1 ! @p2 ! @p3
      .if %0 = 4
@3       .= %4
      .endif
      .if .not [@3 & @special]      
         poke  dcomnd,'P
      .endif
      @dmoke %1,daux1,[@3 & @p1]
      @dmoke %2,dbytlo,[@3 & @p2] / @p2
      @dmoke %3,dbuflo,[@3 & @p3] / @p3
      jsr   dskinv
   .endm

SIOREAD  = 'R
SIOWRITE = 'P

   .macro SETUP_SIO
@3    .= @p1 ! @p2 ! @p3 ! @p4
      .if %0 = 5
@3       .= %5
      .endif
      @moke  %1,dunit, [@3 & @p1]
      @moke  %2,dcomnd,[@3 & @p2] / @p2
      @dmoke %3,daux1, [@3 & @p3] / @p3
      @dmoke %4,dbuflo,[@3 & @p4] / @p4
   .endm

   .endif