
; Expansion-Interface

   INCLUDE  "lvo/misc.i"

   XREF  _ExpansionBase





CREATE MACRO Name,Registermaske,Registeranzahl,Satz1,Anzahl1,Satz2,Anzahl2...

   IFD   \1
   XDEF  _\1

_\1
  IFEQ   \3-1        ; ein Register ?
   move.l   \2,-(SP)
  ELSE
   movem.l  \2,-(SP)
  ENDC

TIEFE SET   4+4*\3
  IFNC   '\4',''
   SATZ  \4,\5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i,\j
  ENDC

   move.l   _ExpansionBase,a6
   jsr      _LVO\1(a6)
  IFEQ   \3-1        ; ein Register ?
   move.l   (SP)+,\2
  ELSE
   movem.l  (SP)+,\2
  ENDC
   rts

   ENDC

   ENDM





SATZ  MACRO Satz1,Anzahl1,Satz2,Anzahl2...
  IFEQ   \2-1        ; ein Register ?
   move.l   TIEFE(SP),\1
  ELSE
   movem.l  TIEFE(SP),\1
  ENDC
TIEFE SET   TIEFE+4*\2
  IFNC   '\3',''
   SATZ  \3,\4,\5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i
  ENDC
   ENDM





; AddConfigDev(configDev)(A0)
   CREATE   AddConfigDev,a6,1,a0,1

;; expansionUnused()
;   CREATE   expansionUnused,a6,1

; AllocBoardMem(slotSpec)(D0)
   CREATE   AllocBoardMem,a6,1,d0,1

; AllocConfigDev()
   CREATE   AllocConfigDev,a6,1

; AllocExpansionMem(numSlots,SlotAlign,SlotOffset)(D0/D1/D2)
   CREATE   AllocExpansionMem,d2/a6,2,d0-d2,3

; ConfigBoard(board,configDev)(A0/A1)
   CREATE   ConfigBoard,a6,1,a0-a1,2

; ConfigChain(baseAddr)(A0)
   CREATE   ConfigChain,a6,1,a0,1

; FindConfigDev(oldConfigDev,manufacturer,product)(A0,D0/D1)
   CREATE   FindConfigDev,a6,1,a0,1,d0-d1,2

; FreeBoardMem(startSlot,slotSpec)(D0/D1)
   CREATE   FreeBoardMem,a6,1,d0-d1,2

; FreeConfigDev(configDev)(A0)
   CREATE   FreeConfigDev,a6,1,a0,1

; FreeExpansionMem(startSlot,numSlots)(D0/D1)
   CREATE   FreeExpansionMem,a6,1,d0-d1,2

; ReadExpansionByte(board,offset)(A0,D0)
   CREATE   ReadExpansionByte,a6,1,a0,1,d0,1

; ReadExpansionRom(board,configDev)(A0/A1)
   CREATE   ReadExpansionRom,a6,1,a0-a1,2

; RemConfigDev(configDev)(A0)
   CREATE   RemConfigDev,a6,1,a0,1

; WriteExpansionByte(board,offset,byte)(A0,D0/D1)
   CREATE   WriteExpansionByte,a6,1,a0,1,d0-d1,2

; ObtainConfigBinding()
   CREATE   ObtainConfigBinding,a6,1

; ReleaseConfigBinding()
   CREATE   ReleaseConfigBinding,a6,1

; SetCurrentBinding(currentBinding,bindingSize)(A0,D0)
   CREATE   SetCurrentBinding,a6,1,a0,1,d0,1

; GetCurrentBinding(currentBinding,bindingSize)(A0,D0)
   CREATE   GetCurrentBinding,a6,1,a0,1,d0,1

; MakeDosNode(parmPacket)(A0)
   CREATE   MakeDosNode,a6,1,a0,1

; AddDosNode(bootPri,flags,dosNode)(D0/D1/A0)
   CREATE   AddDosNode,a6,1,d0-d1,2,a0,1





; Offsets

   IFD   OFFSETS

   XDEF  _LVOAddConfigDev
   XDEF  _LVOexpansionUnused
   XDEF  _LVOAllocBoardMem
   XDEF  _LVOAllocConfigDev
   XDEF  _LVOAllocExpansionMem
   XDEF  _LVOConfigBoard
   XDEF  _LVOConfigChain
   XDEF  _LVOFindConfigDev
   XDEF  _LVOFreeBoardMem
   XDEF  _LVOFreeConfigDev
   XDEF  _LVOFreeExpansionMem
   XDEF  _LVOReadExpansionByte
   XDEF  _LVOReadExpansionRom
   XDEF  _LVORemConfigDev
   XDEF  _LVOWriteExpansionByte
   XDEF  _LVOObtainConfigBinding
   XDEF  _LVOReleaseConfigBinding
   XDEF  _LVOSetCurrentBinding
   XDEF  _LVOGetCurrentBinding
   XDEF  _LVOMakeDosNode
   XDEF  _LVOAddDosNode

   ENDC





   END

