📄 cmx_dio_chan.lis
字号:
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
;Clears PRTxGS bit in pin position
002E 10 push X
002F 4F mov X,SP
0030 73 cpl A
0031 3801 add SP,1 ; complement A to set up mask
0033 5400 mov [X + GSpin],A
0035 52FF mov A,[X + GSport]
0037 4B swap X,A
0038 5E02 mov A,reg[X+GLOBAL_SELECT_OFFSET] ; mov GS pin into A
003A 4F mov X,SP
003B 79 dec X
003C 2300 and A,[X + GSpin] ; and with mask
003E 08 push A
003F 52FF mov A,[X + GSport]
0041 4B swap A,X
0042 18 pop A
0043 6102 mov reg[X+GLOBAL_SELECT_OFFSET],A ; write back to GS pin
0045 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 )
0047 703F and F, ~FLAG_PGMODE_MASK ; NOTE: transition thru 00b state
0049 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
004B 7F ret
004C
004C ;-----------------------------------------------------------------------------
004C ; FUNCTION NAME: DiscreteDriveMode
004C ;
004C ; DESCRIPTION:
004C ; Sets the drive mode for the pin
004C ;
004C ;-----------------------------------------------------------------------------
004C ;
004C ; ARGUMENTS: ( FASTCALL16 format)
004C ; [SP-3] => pin (ie 0 => 0x01, 1 => 0x02, 2 => 0x04, etc)
004C ; [SP-4] => Actual port address
004C ; [SP-5] => drive mode
004C ;
004C ;
004C ; RETURNS:
004C ;
004C ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
004C ;
004C ; THEORY of OPERATION or PROCEDURE:
004C ;
004C ;------------------------------------------------------------------------------
004C ; Stack offset constants
FFFFFFFD DMpin: equ -3
FFFFFFFC DMport: equ -4
FFFFFFFB DriveMode: equ -5
004C
004C
004C _DiscreteDriveMode:
004C DiscreteDriveMode:
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
004C 7110 or F, FLAG_XIO_MASK
004E 4F mov X,SP
004F 52FB mov A,[X + DriveMode] ;move drivemode to A
0051 2101 and A,0x01
0053 B01E jnz SetOne ; jmp if bit 0 set to 1
0055 52FD mov A,[X + DMpin] ; load pin to A
0057 73 cpl A ; set up as mask
0058 54FD mov [X + DMpin],A ; move back
005A 52FC mov A,[X + DMport] ; load port
005C 4B swap X,A ; X now points to port, A contains SP
005D 08 push A ; save on stack
005E 5E00 mov A,reg[X+DRIVE_MODE_ZERO_OFFSET] ; load contents of PRTxDM0 into A
0060 20 pop X ; restore SP
0061 23FD and A,[X + DMpin] ; set bit to zero
0063 08 push A ; push result on stack
0064 52FC mov A,[X + DMport] ; move port to A
0066 4B swap X,A ; X now points to port
0067 18 pop A ; restore from stack
0068 6100 mov reg[X+DRIVE_MODE_ZERO_OFFSET],A ; move to PRTxDM0
006A 4F mov X,SP ; restore SP
006B 52FD mov A,[X + DMpin] ; restore pin to unmasked value
006D 73 cpl A
006E 54FD mov [X + DMpin],A
0070 8012 jmp Done
0072
0072 SetOne:
0072 52FC mov A,[ X + DMport] ; load port to A
0074 4B swap X, A ; X now points to port, A contains SP
0075 08 push A ; save the SP
0076 5E00 mov A,reg[X+DRIVE_MODE_ZERO_OFFSET] ; load contents of PRTxDM0 into A
0078 20 pop X ; restore SP
0079 2BFD or A,[X + DMpin] ; set to 1
007B 08 push A ; save on stack
007C 52FC mov A,[X + DMport] ; load port to A
007E 4B swap X,A ; X now points to port
007F 18 pop A ; restore from stack
0080 6100 mov reg[X+DRIVE_MODE_ZERO_OFFSET],A ; move to PRTxDM0
0082 4F mov X,SP ; restore SP
0083
0083 Done:
0083 ; Set PRTxDM1 bit
0083 52FB mov A,[X + DriveMode] ; load drive mode to A
0085 2102 and A, 0x02
0087 67 asr A
0088 B01E jnz SetOne1 ;jmp if bit 2 set to 1
008A 52FD mov A,[X + DMpin] ; load pin to A
008C 73 cpl A ; set up as mask
008D 54FD mov [X + DMpin], A ; move back
008F 52FC mov A,[X + DMport] ; load port
0091 4B swap X,A ; X now points to port, A contains SP
0092 08 push A ; save on stack
0093 5E01 mov A,reg[X+DRIVE_MODE_ONE_OFFSET] ; load contents of PRTxDM1 into A
0095 20 pop X ; restore SP
0096 23FD and A,[X + DMpin] ; set bit to zero
0098 08 push A ; push result on stack
0099 52FC mov A,[X + DMport] ; move port to A
009B 4B swap X,A ; X now points to port
009C 18 pop A ; restore from stack
009D 6101 mov reg[X+DRIVE_MODE_ONE_OFFSET],A ; Set PRTxDM1 bit to zero
009F 4F mov X,SP ; restore SP
00A0 52FD mov A,[X + DMpin] ; restore pin to unmasked value
00A2 73 cpl A
00A3 54FD mov [X + DMpin],A
00A5 8012 jmp Done1
00A7
00A7 SetOne1:
00A7 52FC mov A,[X + DMport] ; load port to A
00A9 4B swap X,A ; X now points to port, A contains SP
00AA 08 push A ; save the SP
00AB 5E01 mov A,reg[X+DRIVE_MODE_ONE_OFFSET] ; load contents of PRTxDM1 into A
00AD 20 pop X ; restore SP
00AE 2BFD or A,[X + DMpin] ; set to 1
00B0 08 push A ; save on stack
00B1 52FC mov A,[X + DMport] ; load port to A
00B3 4B swap X,A ; X now points to port
00B4 18 pop A ; restore from stack
00B5 6101 mov reg[X+DRIVE_MODE_ONE_OFFSET],A ; move to PRTxDM1
00B7 4F mov X,SP ; restore SP
00B8
00B8 Done1:
00B8 70EF and F, ~FLAG_XIO_MASK
00BA 52FB mov A,[X + DriveMode]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -