changeset 743:9d5be3fe8ebb

New subroutine module added
author boisy
date Mon, 06 Jan 2003 05:07:48 +0000
parents a05740780938
children 07f62f74805a
files 3rdparty/subrtns/cpu.asm 3rdparty/subrtns/makefile
diffstat 2 files changed, 106 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/3rdparty/subrtns/cpu.asm	Mon Jan 06 05:07:48 2003 +0000
@@ -0,0 +1,105 @@
+*===========================================================================
+* Basic09 subroutine module to determine the CPU type of the computer
+* Test via:
+*
+* PROGRAM CPU
+* DIM CPUType,Mode:integer
+* RUN CPU(Type,Mode)
+* PRINT "CPU type:";CPUType
+* IF Mode=0 THEN
+*  PRINT "6809 Emulation mode"
+* ELSE
+*  PRINT "6309 Native mode"
+* ENDIF
+* END
+*
+* returns: CPUType: 6809 or 6309  (decimal integer)
+*             Mode: 0=emulation mode, 1=native mode
+*===========================================================================
+
+         nam   CPU
+
+         ifp1
+         use   defsfile
+         endc
+
+rev      set   1          first revision
+tylg     set   Sbrtn+Objct
+atrv     set   ReEnt+Rev
+edition  set   1
+
+         org   0
+         rmb   2          return address
+PCount   rmb   2          number of parameters
+Param1   rmb   2          1st param address
+Length1  rmb   2          size
+Param2   rmb   2
+Length2  rmb   2
+Size     equ   .
+
+         mod   eom,name,tylg,atrv,start,size
+
+name     fcs   /CPU/
+         fcb   edition
+
+Start    ldd   PCount,s   get parameter count
+         cmpd  #2         2 parameters?
+         bne   p.error    no, error out.
+
+         ldd   Length1,s  get size of the first parameter
+         cmpd  #2         integer variable?
+         bne   p.error    no, error out.
+
+         ldd   Length2,s
+         cmpd  #2         integer variable?
+         bne   p.error    no, error out.
+
+* do a 6309/6809 test
+         ldd   #$FFFF     make sure it's non-zero
+*         clrd             executes as a pseudo-NOP ($10), and a CLRA
+         fdb   $104F
+         tstb
+         bne   is.6809
+         ldd   #6309      it's a 6309
+         bra   save.1
+
+is.6809  ldd   #6809      it's a 6809
+save.1   ldx   Param1,s   where to put the CPU type
+         std   ,x         save the integer CPU type
+
+* if it's a 6809, we don't need to do the next part, as we KNOW it's
+* running in 6809 emulation mode!
+
+* this is harder.... are we in native mode?
+         pshs  cc,dp,x,y,u   save all registers but D
+*         pshsw            a NOP on a 6809
+         fdb   $1038
+
+         leay  native,pc   native mode PC
+         leax  emulate,pc  emulation mode PC
+         pshs  x,y         save them
+         pshs  cc,d,dp,x,y,u  and the rest of the registers, too.
+         orcc  #Entire     set the entire bit in CC
+         rti
+
+emulate  leas  2,s        emulation mode: kill native mode PC
+         clrb             we're in emulation mode
+         fcb   $8C        skip 2 bytes
+native   ldb   #1         in native mode
+         puls  u          restore W from off-stack
+*         tfr   u,w        a PULSW does an 'RTS' on a 6809
+         fdb   $1F36 
+         puls  cc,dp,x,y,u  restore all of our other registers
+         clra             now d=0: emulation, 1: native
+         ldx   Param2,s   where to put the data
+         std   ,x         save native/emulation mode flag
+         clrb             no errors
+         rts
+
+p.error  comb             set the carry
+         ldb   #$38       Basic09 parameter error
+         rts
+
+         emod
+eom      equ   *
+         end
--- a/3rdparty/subrtns/makefile	Mon Jan 06 03:27:22 2003 +0000
+++ b/3rdparty/subrtns/makefile	Mon Jan 06 05:07:48 2003 +0000
@@ -2,7 +2,7 @@
 
 DEPENDS		= ./Makefile
 
-CMDS		= hires joystk
+CMDS		= cpu hires joystk
 
 ALLOBJS		= $(CMDS)