View Single Post
Old 10 August 2023, 05:18   #13
earok
Registered User
 
Join Date: Dec 2013
Location: Auckland
Posts: 3,545
I've de-tokenized the CDTV device example from the Ultimate Blitz Basic CD

Code:
;
; accessing exec level devices
;

NEWTYPE.Node:*ln_Succ.Node:*ln_Pred:ln_Type.b:ln_Pri:*ln_Name.b:End NEWTYPE

NEWTYPE.List:*lh_Head.Node:*lh_Tail:*lh_TailPred:lh_Type.b:l_pad:End NEWTYPE

NEWTYPE.MsgPort
  mp_Node.Node
  mp_Flags.b
  mp_SigBit.b
  *mp_SigTask.w
  mp_MsgList.List
End NEWTYPE

NEWTYPE.Message
  mn_Node.Node
  *mn_ReplyPort.MsgPort
  mn_Length.w
End NEWTYPE

NEWTYPE.IOStdReq
  io_Message.Message
  *io_Device.b           ;Device
  *io_Unit.b             ;Unit
  io_Command.w
  io_Flags.b
  io_Error.b
  io_Actual.l
  io_Length.l
  *io_Data.b
  io_Offset.l

;add particulars to device here
;  rate.w:pitch:mode:sex:chmask.l:nmmask.w:vol:sampfreq
;  mouths.b:chanmask.b:numchan.b:pad.b

End NEWTYPE

;
;initialise messageport and iorequest for talking to device
;

DEFTYPE .IOStdReq cdio
DEFTYPE .MsgPort myport

myport\mp_Node\ln_Type=4
myport\mp_MsgList\lh_Head=&myport\mp_MsgList\lh_Tail
myport\mp_MsgList\lh_TailPred=&myport\mp_MsgList\lh_Head

cdio\io_Message\mn_Node\ln_Type=5
cdio\io_Message\mn_ReplyPort=&myport
cdio\io_Message\mn_Length=SizeOf.IOStdReq

;
; attempt to open device
;

If OpenDevice_("cdtv.device",0,cdio,0)<>0 Then Print "cant open cdtv":MouseWait:End

signal.l=AllocSignal_(-1):If signal<0 Then End
myport\mp_SigBit=signal
myport\mp_SigTask=FindTask_(0)

;
; cdtv package specific stuff
;


NEWTYPE .subq
  status.b:addrctrl:track:index
  diskposition.l:trackposition.l
  validupc.b:pad1:pad2:pad3
End NEWTYPE

DEFTYPE .subq mysubq

;
; test command
;

  #_INVALID=0:#_RESET=1:#_READ=2:#_WRITE=3:#_UPDATE=4
  #_CLEAR=5:#_STOP=6:#_START=7:#_FLUSH=8:#_NONSTD= 9

  #SUBQMSF=51
  #PLAYTRACK=43

cdio\io_Command=#PLAYTRACK                    ;SUBQMSF
                                              ;cdio\io_Data=0     ;mysubq
cdio\io_Offset=1                ; start track
cdio\io_Length=2                ; end track

DoIO_ cdio                ; err.l=DoIO_(cdio)

;NPrint mysubq\status
;NPrint mysubq\status
;NPrint mysubq\status
;NPrint mysubq\status
;MouseWait

CloseDevice_ cdio
FreeSignal_ signal
MouseWait
End

Last edited by earok; 10 August 2023 at 05:29.
earok is offline  
 
Page generated in 0.04607 seconds with 11 queries