Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/subrtns/cpu.asm @ 2772:0a3f4d8ea6d5
Found ENDC in wrong location in dwread.asm and dwwrite.asm. Corrected.
Moved the native 6309 code in dwread.asm and dwwrite.asm into the H6309 labeled area and changed IFEQ H6309 to IFNE H6309. Also moved the 57600bps 6809 code to the default location. This change had been done in the old dwread.asm and dwwrite.asm files to make it easier to follow. Though these two files were overwritten from the HDBDOS project dwread.asm and dwwrite.asm files. So this conversion needed to be done again so it made the source easier to follow.
author | drencor-xeen |
---|---|
date | Wed, 23 Jan 2013 12:36:55 -0600 |
parents | 900ceed1880a |
children |
line wrap: on
line source
******************************************************************** * CPU - CPU Determiner Subroutine Module * * $Id$ * * 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 * * Ed. Comments Who YY/MM/DD * ------------------------------------------------------------------ * 1 Created ADK ??/??/?? nam CPU ttl CPU Determiner Subroutine Module 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