?? init.asm
字號:
ICW1M_I1M EQU 0020H ;擴展地址為0F020H
ICW2M_I2M EQU 0021H ;擴展地址為0F021H
ICW3M_I3M EQU 0021H ;擴展地址為0F021H
ICW4M_I4M EQU 0021H ;擴展地址為0F021H
OCW1M_O1M EQU 0021H ;擴展地址為0F021H
OCW2M_O2M EQU 0020H ;擴展地址為0F020H
OCW3M_O3M EQU 0020H ;擴展地址為0F020H
ICW1S_I1S EQU 00A0H ;擴展地址為0F0A0H
ICW2S_I2S EQU 00A1H ;擴展地址為0F0A1H
ICW3S_I3S EQU 00A1H ;擴展地址為0F0A1H
ICW4S_I4S EQU 00A1H ;擴展地址為0F0A1H
OCW1S_O1S EQU 00A1H ;擴展地址為0F0A1H
OCW2S_O2S EQU 00A0H ;擴展地址為0F0A0H
OCW3S_O3S EQU 00A0H ;擴展地址為0F0A0H
PAGE
;-------------------------------------------------------------------------
MY_STACK SEGMENT PUBLIC 'STACK'
DB 500H DUP(0)
TOS LABEL WORD
MY_STACK ENDS
MY_DATA SEGMENT PUBLIC 'DATA'
PUBLIC SIO_1_RECV_BUFF
SIO_1_RECV_BUFF DB 1000H DUP(0)
PUBLIC SIO_1_RECV_NUM
SIO_1_RECV_NUM DW 0
PUBLIC SIO_1_SEND_BUFF
SIO_1_SEND_BUFF DB 1000H DUP(0)
PUBLIC SIO_1_SEND_NUM
SIO_1_SEND_NUM DW 0
PUBLIC SIO_1_SEND_COUNT
SIO_1_SEND_COUNT DW 0
PUBLIC SIO_0_RECV_BUFF
SIO_0_RECV_BUFF DB 1000H DUP(0)
PUBLIC SIO_0_RECV_NUM
SIO_0_RECV_NUM DW 0
PUBLIC SIO_0_SEND_BUFF
SIO_0_SEND_BUFF DB 1000H DUP(0)
PUBLIC SIO_0_SEND_NUM
SIO_0_SEND_NUM DW 0
PUBLIC SIO_0_SEND_COUNT
SIO_0_SEND_COUNT DW 0
PUBLIC COUNTER
COUNTER DB 00H
MY_DATA ENDS
PAGE
;*********************************************************************
;* *
;* C O D E B E G I N S H E R E *
;* *
;*********************************************************************
MY_CODE SEGMENT PARA 'CODE'
ASSUME CS:MY_CODE,SS:MY_STACK,DS:MY_DATA,ES:MY_DATA
PUBLIC MAIN
EXTRN OBDH:FAR
MAIN PROC FAR
;****************************************
; MONITOR INIT
start:
CLI
MOV CX,100
LOOP $
;**************************************************
MOV AX,MY_DATA
MOV DS,AX
MOV ES,AX
MOV AX,MY_STACK
MOV SS,AX
MOV SP,OFFSET TOS
;********************************************************
MOV AX,8000H ; Enable expanded I/O space
OUT 23H,AL ; and unlock the re-map bits
XCHG AL,AH
OUT 22H,AL
OUT 22H,AX
;********************************************************
; Initialize the Clock and Power Managment Unit for:
; Internal clock frequency of 12.0/2=6 MHz (Iclk2)
; Desired clock output of 0.02 MHz (oclk)
; clkprs value = clk2/oclk-2=298=12A
;********************************************************
MOV AL,0CH ; init PWRCON
MOV DX,0F800H ; watch dag ready and halt ready come from internal
OUT DX,AL ; active mode
MOV AX,012AH ; init CLKPRS
MOV DX,0F804H ; 298 + 2 = 12M/2/oclk
OUT DX,AX ; oclk = 0.02M
;********************************************************
; Initialize the Watch Dog Timer for:
; Watch Dog Timer Status=Disabled.
;********************************************************
MOV AL,01H ; WDT's clock disabled
MOV DX,0F4CAH ; then WDT is no used
OUT DX,AL
;********************************************************
; Initialize Chip Select Unit for
; UCS: start address is F0000H.
; Region size is 64 Kbytes. (f0000h--ffff0h)
; 15 wait states.
; Upper chip select is Enabled.
; 16 bit data bus size in memory space.
; External bus read is Disabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0000 0011 1100 000 (start address F000H)
; cm15--cm1: 0000 0000 0011 111 ( length is 64 Kbytes)
; UCSADL:70FH;UCSADH:0FH;UCSMSKL:FC01H;UCSMSKH:0
;********************************************************
MOV AX,70FH
MOV DX,0F438H
OUT DX,AX ; set UCSADL
MOV AX,0FH
MOV DX,0F43AH
OUT DX,AX ; set UCSADH
MOV AX,0FC01H ; SMM address bit is masked; enable chip select channel
MOV DX,0F43CH
OUT DX,AX ; set UCSMSKL
MOV AX,0
MOV DX,0F43EH
OUT DX,AX ; set UCSMSKH
;
;*************** NOTHING IS CONNECTED *******************
; Initialize Chip Select Unit for
; CS0: start address is 80000H.
; Region size is 256 Kbytes. (80000-BFFFF)
; 15 wait states.
; chip select 0 is Enabled.
; 16 bit data bus size in memory space.
; External bus read is Disabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0000 0010 0000 000 ( start address 8000H)
; cm15--cm1: 0000 0000 1111 111 ( length is 256 Kbytes)
; CS0ADL:70FH;CS0ADH:0;CS0MSKL:0FC01H;CS0MSKH:7
;********************************************************
MOV AX,70FH ; not 15 wait states
MOV DX,0F400H
OUT DX,AX ; set CS0ADL
MOV AX,8
MOV DX,0F402H
OUT DX,AX ; set CS0ADH
MOV AX,0FC01H
MOV DX,0F404H
OUT DX,AX ; set CS0MSKL
MOV AX,3
MOV DX,0F406H
OUT DX,AX ; set CS0MSKH
;********************************************************
; Initialize Chip Select Unit for
; CS1: start address is 0H.
; Region size is 512 Kbytes. (00000H--7FFFFH)
; 15 wait states.
; chip select 1 is Enabled.
; 16 bit data bus size in memory space.
; External bus read is Disabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0000 0000 0000 000 (start address 0000H)
; cm15--cm1: 0000 0001 1111 111 (length is 512 Kbytes)
; CS1SADL:70FH;CS1ADH:8;CS1MSKL:0FC01H;CS1MSKH:3
;********************************************************
MOV AX,70FH ; 15 wait states
MOV DX,0F408H
OUT DX,AX ; set CS1ADL
MOV AX,0
MOV DX,0F40AH
OUT DX,AX ; set CS1ADH
MOV AX,0FC01H
MOV DX,0F40CH
OUT DX,AX ; set CS1MSKL
MOV AX,07H
MOV DX,0F40EH
OUT DX,AX ; set CS1MSKH
;
;********************************************************
; Initialize Chip Select Unit for
; CS2: start address is 2000H.
; Region size is 512 bytes. (2000H--21FFH)
; 15 wait states.
; chip select 2 is Enabled.
; 8 bit data bus size in I/O space.
; External bus read is Disabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0010 0000 0000 000 (start address 2000H)
; cm15--cm1: 0000 0001 1111 111 (length is 512 bytes)
; CS2ADL:20FH;CS2ADH:80H;CS2MSKL:FC01H;CS2MSKH:3
;********************************************************
MOV AX,040fh ; 15 wait -- I/0 -- 8 bit data bus
MOV DX,0F410H
OUT DX,AX ; set CS2ADL
MOV AX,80H
MOV DX,0F412H
OUT DX,AX ; set CS2ADH
MOV AX,0FC01H
MOV DX,0F414H
OUT DX,AX ; set CS2MSKL
MOV AX,7
MOV DX,0F416H
OUT DX,AX ; set CS2MSKH
;********************************************************
; Initialize Chip Select Unit for
; CS3: start address is 3000H.
; Region size is 256 bytes. (3000H--30FFH)
; 15 wait states.
; chip select 3 is Enabled.
; 8 bit data bus size in I/O space.
; External bus read is enabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0011 0000 0000 000 (start address 3000H)
; cm15--cm1: 0000 0000 1111 111 (length is 256 bytes)
; CS3ADL:60FH;CS3ADH:C8H;CS3MSKL:0FC01H;CS3MSKH:0
;********************************************************
MOV AX,40FH ; 15 wait -- IO -- 8 bit bus
MOV DX,0F418H
OUT DX,AX ; set CS3ADL
MOV AX,0C0H
MOV DX,0F41AH
OUT DX,AX ; set CS3ADH
MOV AX,0FC01H
MOV DX,0F41CH
OUT DX,AX ; set CS3MSKL
MOV AX,03
MOV DX,0F41EH
OUT DX,AX ; set CS3MSKH
;********************************************************
; Initialize Chip Select Unit for
; CS4: start address is 4000H.
; Region size is 32 bytes. (4000H--40FFH)
; 15 wait states.
; chip select 4 is Enabled.
; 8 bit data bus size in I/O space.
; External bus read is enabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0100 0000 0000 000 (start address 4000H)
; cm15--cm1: 0000 0000 1111 111 (length is 256 bytes)
; CS4ADL:40FH;CS4ADH:109H;CS4MSKL:7C01H;CS4MSKH:0
;********************************************************
MOV AX,40FH
MOV DX,0F420H
OUT DX,AX ; set CS4ADL
MOV AX,100H
MOV DX,0F422H
OUT DX,AX ; set CS4ADH
MOV AX,0FC01H
MOV DX,0F424H
OUT DX,AX ; set CS4MSKL
MOV AX,3
MOV DX,0F426H
OUT DX,AX ; set CS4MSKH
;********************************************************
; Initialize Chip Select Unit for
; CS5: start address is 5000H.
; Region size is 2 bytes. (5000H--503FH)
; 15 wait states.
; chip select 5 is Enabled.
; 8 bit data bus size in I/O space.
; External bus read is enabled.
; SMM region is accessable during SMI access
; and memory access.
; ca15--ca1: 0101 0000 0000 000 (start address 5000H)
; cm15--cm1: 0000 0000 0011 111 (length is 64 bytes)
; CS5ADL:840FH;CS3ADH:149H;CS3MSKL:401H;CS3MSKH:0
;********************************************************
MOV AX,40FH
MOV DX,0F428H
OUT DX,AX ; set CS5ADL
MOV AX,140H
MOV DX,0F42AH
OUT DX,AX ; set CS5ADH
MOV AX,0FC01H
MOV DX,0F42CH
OUT DX,AX ; set CS5MSKL
MOV AX,0
MOV DX,0F42EH
OUT DX,AX ; set CS5MSKH
;********************************************************
; Initialize Chip Select Unit for
; CS6: disable
;********************************************************
MOV AX,40FH
MOV DX,0F430H
OUT DX,AX ; set CS6ADL
MOV AX,180H
MOV DX,0F432H
OUT DX,AX ; set CS6ADH
MOV AX,400H ; disable here
MOV DX,0F434H
OUT DX,AX ; set CS6MSKL
MOV AX,0FH
MOV DX,0F436H
OUT DX,AX ; set CS6MSKH
;****************************************************************
;* 初始化中斷配置寄存器INTCFG: *
;* intcfg.0置0表示連接從IR0到VSS; *
;* intcfg.1置1表示連接從IR1到管腳INT5; *
;* intcfg.2置0且intcfg.4置1表示連接從IR4到管腳INT6; *
;* intcfg.3置1表示連接從IR6到管腳INT7; *
;* intcfg.5置0表示連接主IR4到管腳SIOINT0; *
;* intcfg.6置0表示連接主IR3到管腳SIOINT1; *
;* intcfg.7置1表示主8259和從8259級聯。 *
;****************************************************************
MOV AL,09AH ; modified for using sioint
MOV DX,0F832H
OUT DX,AL
;****************************************************************
;* 初始化定時器配置寄存器TMRCFG: *
;*VCC CONNECT TO GATE0,GATE0 ALLWAYS ENABLED
;****************************************************************
MOV AX,00H
MOV DX,0F834H
OUT DX,AL
;
;****************************************************************
;* INITIALIZE TMRCON *
;USE COUNTER0,MODE 2,BINARRY FORMAT,
;WRITE LEAST SIGNIFICANT BYTE FIRST,THEN MOST SIGNIFICANT BYTE
;****************************************************************
MOV AL,34H
MOV DX,0043H
OUT DX,AL
;****************************************************************
;* INITIALIZE TMR0,WRITE THE COUNT VALUE *
;* VALUE = 0.2s/50Us = 4000 = 0fa0H
;****************************************************************
MOV AL,A0H
MOV DX,40H
OUT DX,AL
MOV AL,0FH
MOV DX,40H
OUT DX,AL
;
;****************************************************************
;* 初始化寄存器SIOCFG: *
;* we use SIO and don't use SSIO *
;****************************************************************
MOV AX,0C7H ; all config to internal
MOV DX,0F836H
OUT DX,AL
;
;****************************************************************
;* 初始化端口92--PORT92: *
;* 每次復位前必須將port92.0清0。 *
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -