OpenCores
URL https://opencores.org/ocsvn/1664/1664/trunk

Subversion Repositories 1664

[/] [1664/] [trunk/] [arci/] [1664/] [dev/] [0.imita.0.1664] - Rev 2

Compare with Previous | Blame | View Log

;...............................................................................
.inclui 0.base.opera.1664
.inclui 0.imita.inclui.1664
.inclui 0.SO.inclui.1664

.defina SO_pila_desloca {imaje_fini 0x2000 + 0xfff000 &}
.defina SO_pila_grandia {1 1024 1 - sinia_grandia * *}

.defina usor_pila_desloca 0
.defina usor_pila_grandia {128 1024 *}

.defina usor_esecuta_desloca {1 1024 1024 1024  * * *}
.defina usor_esecuta_grandia {8 1024 *}

.defina usor_datos_desloca {2 1024 1024 1024 * * *}

.model x {
puia 0
puia_ 1
puia_ 2
ldri 2 %0
ldri 1 0x1d2
ldm [1] 2
bpasi
tira 2
tira 1
tira 0
}
;===============================================================================
:reinisia
;===============================================================================
ylr [sIP + 0]
desloca_relativa eseta_reinisia
desloca_relativa eseta_opera_nonlegal 1
desloca_relativa eseta_usor 2
desloca_relativa 0 3 ;reservada 
desloca_relativa eseta_sicle_usor_limite 4
desloca_relativa eseta_div_zero 5
desloca_relativa eseta_bp_usor 6
desloca_relativa eseta_bp_vantaje 7
desloca_relativa 0 8 ;reservada
desloca_relativa eseta_umm_asede 9 
desloca_relativa eseta_umm_interompe 10

;-------------------------------------------------------------------------------
eticeta_opera SO_usor_nova ;usor_esecuta_desloca_real, usor_esecuta_grandia 
                           ;(0) mapa
;-------------------------------------------------------------------------------
.defina mapa_grandia {sinia_grandia 3 * 2 * 1 +}
.defina sR_MAPA sR1
.defina sR_USOR_ESECUTA_DESLOCA_REAL sR2
.defina sR_STATE sR3

puia sREVENI
entra

str 0 sR0
str 1 sR4
ldr 0 1
yl memoria_asinia_nova
str 0 sR_USOR_ESECUTA_DESLOCA_REAL
ldr 1 sR0
ldr 2 sR4
yl memoria_copia

ldri 0 state_usor_grandia
yl memoria_asinia_nova
str 0 sR_STATE
rev opera_rev_state_usor_reteni

ldri 0 mapa_grandia
yl memoria_asinia_nova
str 0 sR_MAPA

ldri 1 {sPILA sinia_grandia *}
plu 1 sR_STATE
ldri 0 usor_pila_grandia
stm [1]
yl memoria_asinia_nova
str 0 sT0

ldr 3 sR_MAPA
ldri 0 {usor_pila_grandia 1 umm_permete_leje << | 1 umm_permete_scrive << |}
stm [3+]
ldri 0 usor_pila_desloca
stm [3+]
ldr 0 sT0
stm [3+]

ldri 2 {sinia_grandia 1 -}
ldri sT1 {1 umm_permete_leje << | 1 umm_permete_esecuta << |}
ldr 0 sR4
plu 0 2
eor 2 s_n
and 0 2
or 0 sT1
stm [3+]
ldri 0 usor_esecuta_desloca
stm [3+]
ldr 0 sR_USOR_ESECUTA_DESLOCA_REAL
stm [3+]

;mapa fini
eor 0 0
stm [3]

;sinia_inisia_s_
ldri 3 {s_1 sinia_grandia *}
plu 3 sR_STATE
ldr 0 s_1
stm [3]
ldri 3 {s_n sinia_grandia *}
plu 3 sR_STATE
ldr 0 s_n
stm [3]

ldr 0 sR_STATE
rev opera_rev_state_usor_restora
eor 0 0
sicle_usor
eor 0 0
rev opera_rev_sicle_usor_limite_intercambia
ldr 0 sR_STATE
yl memoria_asinia_libri

ldr 0 sR_MAPA
departi
tira 1 
str 1 sIP

;===============================================================================
eticeta_opera eseta_reinisia
;===============================================================================
init_sinia_s_
ldri sPILA SO_pila_desloca
yl memoria_asinia_inisia

stm_ii umm_desloca_interompe_ativa 0
stm_ii umm_desloca_interompe_masca -1
stm_ii umm_desloca_interompe_capasi 0

ldri_m 1 {usor_0_fini usor_0 -}
ldri_m 0 usor_0
yl SO_usor_nova

str 0 sT0
ldri 1 umm_desloca_usor_mapa
ldr 0 sT0
stm [1]

ldri sREVENI_ESETA usor_esecuta_desloca
rev opera_rev_eseta

;===============================================================================
eticeta_opera eseta_opera_nonlegal
;===============================================================================
rev opera_rev_eseta

;===============================================================================
eticeta_opera eseta_usor ;opera, parametre... ; (0) resulta, (sT0) eror
;===============================================================================
puia sREVENI_ESETA
depende_inoria
str 0 sR0
ldri sT0 SO_eseta_cuantia ;eseta_usor opera masima
ldri sR1 state_usor_grandia
ldr 0 sPILA
sut 0 sR1
str 0 sPILA
rev opera_rev_state_usor_reteni

str 0 3
ldm [3+]
cmp 0 sT0
c yli eseta_usor_fini
str 0 1
ldri 0 sinia_bitio_sh_
shl 1 0
ylr [sIP + 1]
desloca_relativa eseta_usor_imita_exit
desloca_relativa eseta_usor_memoria_nova 1
desloca_relativa eseta_usor_memoria_libri 2
desloca_relativa eseta_usor_imita_argc 3
desloca_relativa eseta_usor_imita_argv 4
desloca_relativa eseta_usor_imita_open 5
desloca_relativa eseta_usor_imita_close 6
desloca_relativa eseta_usor_imita_read 7
desloca_relativa eseta_usor_imita_write 8
desloca_relativa eseta_usor_imita_lseek 9
desloca_relativa eseta_usor_imita_ftruncate 10
desloca_relativa eseta_usor_imita_time 11
desloca_relativa eseta_usor_imita_nanosleep 12

;-------------------------------------------------------------------------------
:eseta_usor_fini
;-------------------------------------------------------------------------------
ldr 0 sPILA
rev opera_rev_state_usor_restora
plu 0 sR1
str 0 sPILA
tira sREVENI_ESETA
rev opera_rev_eseta

;-------------------------------------------------------------------------------
:eseta_usor_memoria_nova
;-------------------------------------------------------------------------------
ldri sR4 1 ;eror: memoria nondisponable (eror alternativa)
ldm [3]
str 0 sR2
yl memoria_asinia_nova
cmp 0 s_0
z yli eseta_usor_memoria_nova@fini ;eror: memoria nondisponable

@susede
str 0 1
ldri 3 umm_desloca_usor_mapa
str 3 sR3
ldr 2 sR2
ldm [3]
yl memoria_asinia_mapa_sesion_ajunta
str 1 sT0
ldr 3 sR3
stm [3]
ldri sR4 0 ;eror: disponable
ldr 0 sT0

@fini
stm [sPILA]
ldri 1 {sinia_grandia sT0 *} ;(eror alternativa)
plu 1 sPILA
ldr 0 sR4
stm [1]
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_memoria_libri
;-------------------------------------------------------------------------------
ldm [3]
cmp 0 s_0
z yli eseta_usor_memoria_libri@fini
yl memoria_asinia_mapa_sesion_libri
str 0 sT0
ldri 1 {sinia_grandia sT0 *}
plu 1 sPILA
ldr 0 sT0
stm [1]

@fini
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_argc
;-------------------------------------------------------------------------------
imita opera_imita_argc
stm [sPILA]
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_argv
;-------------------------------------------------------------------------------
ldm [3+]
str 0 1
ldm [3+]
str 0 sR2
ldri 2 128 ;
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_argv@fini
ldr 1 sR2
imita opera_imita_argv

@fini
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_open
;-------------------------------------------------------------------------------
ldm [3]
str 0 1
ldri 2 256 ;
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_open@fini
imita opera_imita_open
stm [sPILA]

@fini
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_close
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_close
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_read
;-------------------------------------------------------------------------------
ldm [3+]
str 0 sR2
ldm [3+]
str 0 1
ldm [3]
str 0 sR3
str 0 2
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_read@fini
str 0 1
ldr 0 sR2
ldr 2 sR3
imita opera_imita_read

@fini
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_write
;-------------------------------------------------------------------------------
ldm [3+]
str 0 sR2
ldm [3+]
str 0 1
ldm [3]
str 0 sR3
str 0 2
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_write@fini
str 0 1
ldr 0 sR2
ldr 2 sR3
imita opera_imita_write

@fini
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_lseek
;-------------------------------------------------------------------------------
ldm [3+]
str 0 2
ldm [3+]
str 0 1
ldm [3]
cam 0 2
imita opera_imita_lseek
stm [sPILA]
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_ftruncate
;-------------------------------------------------------------------------------
ldm [3+]
str 0 1
ldm [3]
cam 0 1
imita opera_imita_ftruncate
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_time
;-------------------------------------------------------------------------------
imita opera_imita_time
stm [sPILA]
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_nanosleep
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_nanosleep
stm [sPILA]
yl eseta_usor_fini

;-------------------------------------------------------------------------------
:eseta_usor_imita_exit
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_exit
;___

;===============================================================================
eticeta_opera eseta_sicle_usor_limite
;===============================================================================
ldri 0 1000
rev opera_rev_sicle_usor_limite_intercambia
rev opera_rev_eseta

;===============================================================================
eticeta_opera eseta_div_zero
;===============================================================================
;===============================================================================
eticeta_opera eseta_bp_usor
;===============================================================================
rev opera_rev_eseta

;===============================================================================
eticeta_opera eseta_bp_vantaje
;===============================================================================
ldr 0 sREVENI_ESETA
str 0 sIP

;===============================================================================
eticeta_opera eseta_umm_asede
;===============================================================================
;===============================================================================
eticeta_opera eseta_umm_interompe
;===============================================================================
;===============================================================================
eticeta_opera eseta_maneja
;===============================================================================
rev opera_rev_eseta

;sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
.inclui 0.SO.memoria.1664
;sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss

;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
eticeta_opera usor_0
;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
yl usor_inisia

;-------------------------------------------------------------------------------
eticeta_opera ccadena_grandia ;(0) ccadena
;-------------------------------------------------------------------------------
ldr 1 0
ldr 2 sREVENI
eor 3 3
eor 0 0

depende_inoria
@sicle_plu
ldm [1+] 1
cmp 0 s_0
n plu 3 s_1 
n yli ccadena_grandia@sicle_plu

ldr 0 3
str 2 sIP

;-------------------------------------------------------------------------------
eticeta_opera stdout__ccadena ;(0) ccadena
;-------------------------------------------------------------------------------
puia sREVENI
puia
yli ccadena_grandia
str 0 3
tira 2
eseta_SO_write 1
tira
str 0 sIP

;-------------------------------------------------------------------------------
.model stdout__dato_ {
ldi %0
yl stdout__dato
}
eticeta_opera stdout__dato ;(0) dato
;-------------------------------------------------------------------------------
puia sREVENI
puia
ldri 3 1
ldr 2 sPILA
eseta_SO_write 1
tira_
tira
str 0 sIP

;-------------------------------------------------------------------------------
eticeta_opera usor_inisia
:usor
;-------------------------------------------------------------------------------
ldri 1 1024
ldri 0 SO_memoria_nova
rev opera_rev_eseta
str 0 sR0

ldri sT2 0x2b
eseta_SO_argc
str 0 sT1
eor 2 2

@sicle
ldr 1 sR0
eseta_SO_argv
ldr 3 sR0
ldm [3+] 1
cmp 0 sT2
z ldr 0 sR0
z plu 0 s_1
z str 0 sR0
z yli usor@stdout
plu 2 s_1
cmp 2 sT1
n yli usor@sicle
yli usor@fini

@stdout
ldr 0 sR0
yl stdout__ccadena
stdout__dato_ 0x0a

@fini
eor 0 0
eseta_SO_exit

{%.{sinia_bitio 64 <}
;.inclui /fonte/pf2/0.ieee_754.1664
;.inclui /fonte/pf2/0.f2.1664
}

;*******************************************************************************
:usor_0_fini
;*******************************************************************************

;*******************************************************************************
:imaje_fini
;*******************************************************************************

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.