home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
Amiga
/
workbench
/
pilotes
/
pcmcia
/
cnetdevice.lha
/
cnetdevice
/
src
/
cnetconfig.asm
next >
Wrap
Assembly Source File
|
1997-07-29
|
7KB
|
310 lines
;===========================================================================
; cnetconfig
;===========================================================================
;
; creates config file for cnet.devcie (in s:cnetdev.config)
;
; NOTE: The file "s:config.dev" is used by cnet.device ONLY if it cannot
; detect PCMCIA attribute memory ie. if the card did NOT power up
; properly. Therefore cnetconfig should only be run when the card
; IS working properly, so that a valid configuration can be saved!
;
; History:
;
; 8-7-97 v0.0 created by Bruce Abbott (bhabbott@inhb.co.nz)
;
;
VERSION = 0
REVISION = 0
opt i+,d+
output ram:cnetconfig
include start.i ; Amiga includes and startup code
include pcmcia.i ; card.resourse etc.
include sanaii.i ; the essential network stuff
include cnet.i ; CNet CN40BC hardware specs
include printf.i
; flags
MYB_DEVOPENED = 0
MYB_CONSOLE = 1
_main:
move.l WBenchMsg(pc),d0
beq.s .cli
lea consolename(pc),a0
move.l a0,d1
move.l #MODE_NEWFILE,d2
dos open ; open console window
move.l d0,ohandle
bls done
bset #MYB_CONSOLE,flags
bra .getdev
.cli:
dos output ; get CLI output handle
move.l d0,ohandle
beq done
.getdev:
move.l execbase(pc),a3
move.l devicelist(a3),a0
lea devname(pc),a1
exec findname ; find device in exec resident list
move.l d0,a2
tst.l d0
bne found
notfound:
bsr createport ; create msgport for iorequest
move.l d0,port
move.l d0,a0
move.l #IOS2_SIZE,d0
bsr createio ; create iorequest for opendev
move.l d0,ior
move.l ior(pc),a1
lea devname(pc),a0
moveq #0,d0
moveq #0,d1
exec opendevice ; open "cnet.device" unit 0
tst.l d0
beq.s opened
move.l ior(pc),a1
lea fulldevname(pc),a0
moveq #0,d0
moveq #0,d1
exec opendevice ; open "devs:networks/cnet.device"
tst.l d0
beq.s opened
printf <10,"Could not open '%s'!",10>,devname
bra done
opened:
bset #MYB_DEVOPENED,flags
move.l ior(pc),a1
move.l io_device(a1),a2
found:
move.l dd_cardres(a2),a6
lea dd_cardhandle(a2),a1
lea tuple(pc),a0
moveq #CISTPL_CONF_MAP,d1
moveq #40,d0
jsr _LVOCopyTuple(a6) ; read config map tuple
tst.l d0
beq carderror
moveq #0,d3
move.b tuple+5(pc),d3
lsl.w #8,d3
move.b tuple+4(pc),d3
printf <10,"Configuration Register = $%04lx",10>,d3
lea dd_cardhandle(a2),a1
lea tuple(pc),a0
moveq #CISTPL_CONFIG,d1
moveq #40,d0
jsr _LVOCopyTuple(a6) ; read 1st config tuple
tst.l d0
beq carderror
moveq #0,d4
move.b tuple+2(pc),d4
and.b #$3f,d4
printf <10,"Card Configuration ID = $%02lx",10>,d4
move.l dd_romstationaddress(a2),d5
moveq #0,d6
move.w dd_romstationaddress+4(a2),d6
printf <10,"ROM Station Address = %08lx%04lx",10,10>,d5,d6
lea filename(pc),a0
move.l a0,d1
move.l #MODE_NEWFILE,d2
DOS Open
tst.l d0
ble file_error
move.l ohandle(pc),d7 ; remember console output handle
move.l d0,ohandle
printf <"$%04lx=$%02lx",10,"@%08lx%04lx",10>,d3,d4,d5,d6
move.l ohandle(pc),d1
DOS Close
move.l d7,ohandle ; restore console output handle
lea filename(pc),a0
printf <10,"Created '%s'",10,10>,a0
bra done
file_error:
lea filename(pc),a0
printf <10,"Could NOT create '%s'!",10,10>,a0
bra done
carderror:
printf <10,10,"Warning: Attribute memory NOT detected!",10,10>
move.l dd_romstationaddress(a2),d4
moveq #0,d5
move.w dd_romstationaddress+4(a2),d5
printf <"ROM Station Address = %08lx%04lx",10,10>,d4,d5
move.l dd_stationaddress(a2),d4
moveq #0,d5
move.w dd_stationaddress+4(a2),d5
printf <"Station Address used = %08lx%04lx",10,10>,d4,d5
done:
btst #MYB_DEVOPENED,flags(pc)
beq.s .devclosed
move.l ior(pc),a1
exec closedevice ; close device
.devclosed:
move.l ior(pc),a0
move.l #IOS2_SIZE,d0
bsr deleteio ; delete iorequest
move.l port(pc),a0
bsr deleteport ; delete msgport
btst #MYB_CONSOLE,flags(pc)
beq.s .noconsole
move.l #50*10,d1 ; wait 10 seconds
dos delay
move.l ohandle(pc),d1
dos close ; close console window
.noconsole:
moveq #0,d0
rts
;***********************************
;* Create Signalling Message Port *
;***********************************
;
; Port = CreatePort()
; d0
;
CreatePort:
movem.l d2/a2,-(sp)
moveq.l #-1,d0
exec AllocSignal
move.l d0,d2
bmi.s .error
move.b d0,d2
moveq.l #MP_SIZE,d0
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
exec AllocMem
move.l d0,a2
beq.s .error
sub.l a1,a1
exec FindTask
move.l d0,MP_SIGTASK(a2)
move.b d2,MP_SIGBIT(a2)
move.b #NT_MSGPORT,LN_TYPE(a2)
move.b #PA_SIGNAL,MP_FLAGS(a2)
lea MP_MSGLIST(a2),a1
move.l a1,lh_head(a1) ;Newlist a1
addq.l #4,lh_head(a1)
clr.l lh_tail(a1)
move.l a1,lh_tailpred(a1)
move.l a2,d0 ; D0 = port
bra.s .done
.error:
move.l a2,a1
bsr.s DeletePort
moveq #0,d0
.done:
movem.l (sp)+,d2/a2
rts
;***************************
;* Delete Message Port *
;***************************
; DeletePort(port)
; a0
;
DeletePort:
move.l a2,-(sp)
move.l a0,d0
beq.s .done
move.l d0,a1
moveq #0,d0
move.b MP_SIGBIT(a1),d0
bmi.s .nosignal
move.l a1,a2
exec FreeSignal
move.l a2,a1
.nosignal:
moveq #MP_SIZE,d0
exec FreeMem
.done:
move.l (sp)+,a2
rts
;********************************
;* Create IORequest *
;********************************
;
; ioreq = CreateIO(port,size)
; d0 a0 d0
;
CreateIO:
movem.l d2/a2,-(sp)
move.l a0,a2
move.l d0,d2
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
exec AllocMem
tst.l d0
beq.s .done
move.l d0,a0
move.l a2,MN_REPLYPORT(a0)
move.b #NT_MESSAGE,LN_TYPE(a0)
move.w d2,MN_LENGTH(a0)
.done:
movem.l (sp)+,d2/a2
rts
;*********************
;* Delete IO Request *
;*********************
; DeleteIO(ioreq,size)
; a0 d0
;
DeleteIO:
move.l a0,d1
beq.s .done
move.l d1,a1
exec FreeMem
.done:
rts
port:
dc.l 0
ior:
dc.l 0
tuple:
ds.b 48 ; buffer to read tuple into
flags:
dc.b 0
even
fulldevname:
dc.b "devs:networks/"
devname:
dc.b "cnet.device",0
even
filename:
dc.b "s:cnetdev.config",0
even
consolename:
dc.b "CON:60/60/480/120/ cnetconfig ",0
even
dc.b "$VER: cnetconfig "
dc.b (VERSION+"0"),".",(REVISION+"0")," "
dc.b __DATE
dc.b " by Bruce Abbott (bhabbott@inhb.co.nz)",10,0
even