⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.asm

📁 386ex初始化程序。使用中断、定时器、串口。
💻 ASM
📖 第 1 页 / 共 2 页
字号:

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 + -