changeset 2309:f3e79ee2ffef

Driver now moved ISR to dw3, all works
author boisy
date Sun, 03 Jan 2010 15:24:52 +0000
parents b5f0c5326e7e
children 7820a7317242
files 3rdparty/customboots/boisy/makefile level1/modules/clock2_dw3.asm level1/modules/rbdw3.asm level1/modules/scdwt.asm
diffstat 4 files changed, 51 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/3rdparty/customboots/boisy/makefile	Sun Jan 03 14:35:04 2010 +0000
+++ b/3rdparty/customboots/boisy/makefile	Sun Jan 03 15:24:52 2010 +0000
@@ -14,13 +14,16 @@
 SYSGO		= $(MD)/sysgo_dd
 
 # We make our own bootfile and kernel track
-KERNEL		= $(MD)/rel_80 $(MD)/boot_1773_6ms $(MD)/krn
+KERNEL		= $(MD)/rel_80 $(MD)/boot_dw3 $(MD)/krn
 BOOTFILE	= $(MD)/krnp2 $(MD)/ioman $(MD)/init \
 		$(MD)/dw3.sb \
 		$(MD)/scf.mn \
 		$(MD)/scdwt.dr $(MD)/term_scdwt.dt \
 		$(MD)/clock_60hz $(MD)/clock2_dw3 \
-		$(SYSGO) $(CD)/shell_21
+		$(SYSGO) $(CD)/shell_21 \
+		$(CD)/mdir $(CD)/pmap $(CD)/dmem $(CD)/dump
+#		$(MD)/rbf.mn \
+#		$(MD)/rbdw3.dr $(MD)/ddx0.dd \
 
 SUPPORTFILES	= startup
 
--- a/level1/modules/clock2_dw3.asm	Sun Jan 03 14:35:04 2010 +0000
+++ b/level1/modules/clock2_dw3.asm	Sun Jan 03 15:24:52 2010 +0000
@@ -65,8 +65,13 @@
 
 
 Init     
-* We do not bother checking if D.DWSubAddr is $0000 because it will always be since
-* we are the first module to use the subroutine module.
+* Check if subroutine already linked
+         IFGT    Level-1
+         ldx     <D.DWSubAddr
+         ELSE
+         ldx     >D.DWSubAddr
+         ENDC
+         bne     leave
          IFGT    Level-1
          ldx     <D.Proc
          pshs    x
@@ -86,6 +91,7 @@
          sty     >D.DWSubAddr
          ENDC
          jmp     ,y			call initialization routine
+leave    rts
 
          emod          
 eom      equ   *         
--- a/level1/modules/rbdw3.asm	Sun Jan 03 14:35:04 2010 +0000
+++ b/level1/modules/rbdw3.asm	Sun Jan 03 15:24:52 2010 +0000
@@ -128,6 +128,13 @@
          decb
          bne   Init2
 
+* Check if subroutine module has already been linked
+         IFGT  LEVEL-1
+         ldu   <D.DWSubAddr
+         ELSE
+         ldu   >D.DWSubAddr
+         ENDC
+         bne   InitEx2
 * Link to subroutine module
          clra
          leax  name+2,pcr
@@ -151,8 +158,10 @@
          IFGT  Level-1
          puls  a,x
          stx   <D.Proc
+InitEx2
          rts
          ELSE
+InitEx2
          puls  a,pc
          ENDC
 
--- a/level1/modules/scdwt.asm	Sun Jan 03 14:35:04 2010 +0000
+++ b/level1/modules/scdwt.asm	Sun Jan 03 15:24:52 2010 +0000
@@ -160,6 +160,22 @@
 			puls	u				; restore u
       	
 already
+; tell DW we have a new port opening (port mode already on stack)
+			ldb		<V.PORT+1,u		; get our port #			
+			lda     #OP_SERINIT 	; command 
+			pshs   	d      			; command + port # on stack
+			leax    ,s     			; point X to stack 
+			ldy     #3          	; # of bytes to send
+			
+    pshs u
+			IFGT	Level-1
+			ldu   	<D.DWSubAddr
+			ELSE
+			ldu   	>D.DWSubAddr
+			ENDC
+    		jsr     6,u      		; call DWrite
+ puls u
+    		
 ; set up local buffer
 			ldb   	#RxBufDSz      	; default Rx buffer size
 			leax  	RxBuff,u       	; default Rx buffer address
@@ -170,22 +186,17 @@
 			abx  					; add buffer size to buffer start..
 			stx   	RxBufEnd,u     	; save Rx buffer end address
 
-; tell DW we have a new port opening (port mode already on stack)
-			ldb		<V.PORT+1,u		; get our port #			
-			lda     #OP_SERINIT 	; command 
-			pshs   	d      			; command + port # on stack
-			leax    ,s     			; point X to stack 
-			ldy     #3          	; # of bytes to send
-			
-			IFGT	Level-1
-			ldu   	<D.DWSubAddr
-			ELSE
-			ldu   	>D.DWSubAddr
-			ENDC
-    		jsr     6,u      		; call DWrite
-    		
-    		leas	2,s				; clean dw args off stack (leave port mode)
-    		
+                        tfr     u,d (A = high page of statics)
+                        puls    b
+    		        puls    b (B = port number)
+                        IFGT    Level-1
+                        ldx     <D.DWStat
+                        ELSE
+                        ldx     >D.DWStat
+                        ENDC
+; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax
+;			leax    DW.StatTbl,x
+    	                sta	b,x
 InitEx		equ		*
 			puls	a,pc
 InitEx2
@@ -437,6 +448,7 @@
                 clrb
 		rts
 
+ IFEQ 1
 SetPortSig      cmpa   #SS.PortSig
                 bne    SetPortRel
                 lda    PD.CPR,y       current process ID
@@ -450,6 +462,7 @@
                 bsr    ReleaSig
                 clrb
                 rts
+ ENDC
 donebad		comb
 		ldb	#E$UnkSVc
 		rts