📄 cmx_dio_chan.lis
字号:
0000 push A
0000 macro REG_RESTORE( IOReg )
0000 pop A
0000 mov reg[ @IOReg ], A
0000 macro ISR_PRESERVE_PAGE_POINTERS
0000 IF ( SYSTEM_LARGE_MEMORY_MODEL )
0000 REG_PRESERVE CUR_PP
0000 REG_PRESERVE IDX_PP
0000 REG_PRESERVE MVR_PP
0000 REG_PRESERVE MVW_PP
0000 ENDIF
0000 macro ISR_RESTORE_PAGE_POINTERS
0000 IF ( SYSTEM_LARGE_MEMORY_MODEL )
0000 REG_RESTORE MVW_PP
0000 REG_RESTORE MVR_PP
0000 REG_RESTORE IDX_PP
0000 REG_RESTORE CUR_PP
0000 ENDIF
0000 DRIVE_MODE_ZERO_OFFSET: equ 0x00 ; BANK 1
0001 DRIVE_MODE_ONE_OFFSET: equ 0x01
0002 GLOBAL_SELECT_OFFSET: equ 0x02
0003 DRIVE_MODE_TWO_OFFSET: equ 0x03
0000 DATA_REGISTER_OFFSET: equ 0x00 ; BANK 0
0000
0000 ;-----------------------------------------------
0000 ; Global Symbols
0000 ;-----------------------------------------------
export _GlobalSelectConnect
export GlobalSelectConnect
export _GlobalSelectDisconnect
export GlobalSelectDisconnect
export _DiscreteDriveMode
export DiscreteDriveMode
export _SetPin
export SetPin
export _DISetPin
export DISetPin
export _DiscreteReadPin
export DiscreteReadPin
export _pinlu
export pinlu
export _portlu
export portlu
export _DIOChannelPins
export DIOChannelPins
;-----------------------------------------------
; Function Prototypes
;-----------------------------------------------
;-----------------------------------------------
; Constant Definitions
;-----------------------------------------------
area text(ROM,REL)
0000 .literal
0000 _pinlu:
0000 0102040810204080 pinlu: db 01h, 02h, 04h, 08h, 10h, 20h, 40h, 80h
0008 _portlu:
0008 0004080C1014181C portlu: db 00h, 04h, 08h, 0Ch, 10h, 14h, 18h, 1Ch
0010
0010 _DIOChannelPins:
0010 DIOChannelPins:
0010 13 db 13h
0011 .endliteral
0011
0011 ;-----------------------------------------------
0011 ; Variable Allocation
0011 ;-----------------------------------------------
AREA InterruptRAM (RAM, REL, CON)
area text(ROM,REL)
;-----------------------------------------------------------------------------
; FUNCTION NAME: GlobalSelectConnect
;
; DESCRIPTION:
; Sets the appropriate bit of the PRTxGS register to connect the pin to the
; global bus.
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS:
; A => pin mask (ie 0 => 0x01, 1 => 0x02, 2 => 0x04, etc)
; X => Address of actual port.
;
;
; RETURNS:
;
; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
; THEORY of OPERATION or PROCEDURE: Sets Global Select register for pin
;
;------------------------------------------------------------------------------
; Stack offset constants
0000 GSpin: equ 0
FFFFFFFF GSport: equ -1
0011
0011 _GlobalSelectConnect:
0011 GlobalSelectConnect:
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_2 )
IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
or F, FLAG_PGMODE_01b
ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
ENDIF
ENDIF ; RAM_USE_CLASS_2
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_3 )
IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
and F, ~FLAG_PGMODE_01b
ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
ENDIF
ENDIF ; RAM_USE_CLASS_3
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
0011 10 push X ; stores pin and port in temp stack
0012 4F mov X,SP ; locations. X is index to locations
0013 3801 add SP,1 ; complement A to set up mask
0015 5400 mov [X + GSpin],A
0017 52FF mov A,[X + GSport]
0019 4B swap X,A
001A 5E02 mov A,reg[X+GLOBAL_SELECT_OFFSET] ; mov GS pin into A
001C 4F mov X,SP
001D 79 dec X
001E 2B00 or A,[X + GSpin] ; and with mask
0020 08 push A
0021 52FF mov A,[X + GSport]
0023 4B swap A,X
0024 18 pop A
0025 6102 mov reg[X+GLOBAL_SELECT_OFFSET],A ; write back to GS pin
0027 38FE add SP,-2
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_2 )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
0029 703F and F, ~FLAG_PGMODE_MASK ; NOTE: transition thru 00b state
002B 71C0 or F, FLAG_PGMODE_MASK & FLAG_PGMODE_11b
ENDIF
ENDIF ; PGMODE LOCKED
IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
and F, ~FLAG_PGMODE_MASK ; NOTE: transition thru 00b state
or F, FLAG_PGMODE_MASK & FLAG_PGMODE_10b
ENDIF
ENDIF ; PGMODE FREE
ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
ENDIF ; RAM_USE_CLASS_2
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_3 )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
and F, ~FLAG_PGMODE_MASK ; NOTE: transition thru 00b state
or F, FLAG_PGMODE_MASK & FLAG_PGMODE_11b
ENDIF
ENDIF ; PGMODE LOCKED
IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
IF ( SYSTEM_LARGE_MEMORY_MODEL )
and F, ~FLAG_PGMODE_MASK ; NOTE: transition thru 00b state
or F, FLAG_PGMODE_MASK & FLAG_PGMODE_10b
ENDIF
ENDIF ; PGMODE FREE
ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
ENDIF ; RAM_USE_CLASS_3
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_4 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_4
002D 7F ret
002E ;-----------------------------------------------------------------------------
002E ; FUNCTION NAME: GlobalSelectDisconnect
002E ;
002E ; DESCRIPTION:
002E ; Clears the appropriate bit of the PRTxGS register to disconnect the pin
002E ; from the global bus.
002E ;
002E ;-----------------------------------------------------------------------------
002E ;
002E ; ARGUMENTS:
002E ; A => pin mask (ie 0 => 0x01, 1 => 0x02, 2 => 0x04, etc)
002E ; X => Address of actual port.
002E ;
002E ; RETURNS:
002E ;
002E ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
002E ;
002E ; THEORY of OPERATION or PROCEDURE: Clears Global Select register for pin
002E ;
002E ;------------------------------------------------------------------------------
002E ; Stack offset constants
0000 GSpin: equ 0
FFFFFFFF GSport: equ -1
002E _GlobalSelectDisconnect:
002E GlobalSelectDisconnect:
IF ( RAM_USE_CLASS_2 & RAM_USE_CLASS_1 )
; Nothing to do
ENDIF ; RAM_USE_CLASS_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -