📄 amux8.lis
字号:
0000 IF ( SYSTEM_LARGE_MEMORY_MODEL )
0000 or F, FLAG_PGMODE_01b
0000 ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
0000 macro RAM_X_POINTS_TO_INDEXPAGE
0000 IF ( SYSTEM_LARGE_MEMORY_MODEL )
0000 and F, ~FLAG_PGMODE_01b
0000 ENDIF ; SYSTEM_LARGE_MEMORY_MODEL
0000 macro RAM_PROLOGUE( ACTUAL_CLASS )
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_1 )
0000 ; Nothing to do
0000 ENDIF ; RAM_USE_CLASS_1
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_2 )
0000 IF ( SYSTEM_IDXPG_TRACKS_IDX_PP )
0000 RAM_X_POINTS_TO_STACKPAGE ; exit native paging mode!
0000 ENDIF
0000 ENDIF ; RAM_USE_CLASS_2
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_3 )
0000 IF ( SYSTEM_IDXPG_TRACKS_STK_PP )
0000 RAM_X_POINTS_TO_INDEXPAGE ; exit native paging mode!
0000 ENDIF
0000 ENDIF ; RAM_USE_CLASS_3
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_4 )
0000 ; Nothing to do
0000 ENDIF ; RAM_USE_CLASS_4
0000
0000 macro RAM_EPILOGUE( ACTUAL_CLASS )
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_1 )
0000 ; Nothing to do
0000 ENDIF ; RAM_USE_CLASS_1
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_2 )
0000 RAM_RESTORE_NATIVE_PAGING
0000 ENDIF ; RAM_USE_CLASS_2
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_3 )
0000 RAM_RESTORE_NATIVE_PAGING
0000 ENDIF ; RAM_USE_CLASS_3
0000
0000 IF ( @ACTUAL_CLASS & RAM_USE_CLASS_4 )
0000 ; Nothing to do
0000 ENDIF ; RAM_USE_CLASS_4
0000
0000 macro REG_PRESERVE( IOReg )
0000 mov A, reg[ @IOReg ]
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
export AMUX8_InputSelect
export _AMUX8_InputSelect
export AMUX8_Start
export _AMUX8_Start
export AMUX8_Stop
export _AMUX8_Stop
;-----------------------------------------------
; EQUATES
;-----------------------------------------------
0007 MUXMASK: equ 07h
0000
AREA UserModules (ROM, REL)
0000 .SECTION
0000 ;-----------------------------------------------------------------------------
0000 ; FUNCTION NAME: AMUX8_InputSelect
0000 ;
0000 ; DESCRIPTION:
0000 ; Place the signal from one of eight port0 pins on the Analog Column bus.
0000 ;
0000 ;-----------------------------------------------------------------------------
0000 ;
0000 ; ARGUMENTS:
0000 ; A contains the mux input control value
0000 ;
0000 ; Input AMX_IN[1:0] AMX_IN[3:2] ABF_CR0[7]
0000 ; Mux input 0 xxh 00h 0
0000 ; Mux input 1 00h xxh 1
0000 ; Mux input 2 xxh 01h 0
0000 ; Mux input 3 01h xxh 1
0000 ; Mux input 4 xxh 02h 0
0000 ; Mux input 5 02h xxh 1
0000 ; Mux input 6 xxh 03h 0
0000 ; Mux input 7 03h xxh 1
0000 ;
0000 ; RETURNS: none
0000 ;
0000 ; SIDE EFFECTS:
0000 ; REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
0000 ;
0000 ;-----------------------------------------------------------------------------
0000
0000
0000 AMUX8_InputSelect:
0000 _AMUX8_InputSelect:
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
0000 4F mov X,SP ; Get pointer to temp stack location
0001 2107 and A, MUXMASK ; Mask off only valid port0 input bits
0003 67 asr A ; Shift odd/even bit to C flag
0004 08 push A ; Save mux setting
0005 D00F jnc .EVEN_PORT
0007
IF(AMUX8_MUX_COL) ; ***************** Column 2 ************************
.ODD_PORT: ; **** ACol Mux2
or F, FLAG_XIO_MASK
and reg[ABF_CR0], ~0x40 ; Odd port, clear the ACol2Mux bit to select P1,3,5,7
and F, ~FLAG_XIO_MASK
asl [X] ; Move control bits to bits 4:5
asl [X]
asl [X]
asl [X]
mov A, reg[AMX_IN] ; Mask off control bits for ACol Mux2
and A, ~0x30
ljmp AMUX8_InputSelect_End
.EVEN_PORT: ; **** ACol Mux3
or F, FLAG_XIO_MASK
or reg[ABF_CR0], 0x40 ; Even port, set the ACol1Mux bit to select P0,2,4,6
and F, ~FLAG_XIO_MASK
asl [X] ; Move control bits to bits 6:7
asl [X]
asl [X]
asl [X]
asl [X] ;
asl [X]
mov A, reg[AMX_IN] ; Mask off control bits for ACol Mux3
and A, ~0xC0
ljmp AMUX8_InputSelect_End
ELSE ; ***************** COLUMN 1 ************************
0007 .ODD_PORT: ; **** ACol Mux0
0007 7110 or F, FLAG_XIO_MASK
0009 436280 or reg[ABF_CR0], 0x80 ; Odd port, set the ACol1Mux bit to select P1,3,5,7
000C 70EF and F, ~FLAG_XIO_MASK
000E 5D60 mov A, reg[AMX_IN] ; Mask off control bits for ACol Mux3
0010 21FC and A, ~0x03
0012 7D0024 ljmp AMUX8_InputSelect_End
0015
0015 .EVEN_PORT: ; **** Acol Mux1
0015 7110 or F, FLAG_XIO_MASK
0017 41627F and reg[ABF_CR0], ~0x80 ; Even port, clear the ACol1Mux bit to select P0,2,4,6
001A 70EF and F, ~FLAG_XIO_MASK
001C 6600 asl [X] ; Move control bits to bits 2:3
001E 6600 asl [X]
0020 5D60 mov A, reg[AMX_IN] ; Mask off control bits for ACol Mux3
0022 21F3 and A, ~0x0C
ENDIF
0024 AMUX8_InputSelect_End:
0024 2B00 or A,[X]
0026 6060 mov reg[AMX_IN],A ; Mask off control bits for ACol Mux1
0028 18 pop A
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -