home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 55
/
Amiga_Dream_55.iso
/
RISCOS
/
MAGAZINE
/
NEWS
/
PCE021.ZIP
/
Pce021
/
Src
/
cpu
/
s
/
stack
< prev
next >
Wrap
Text File
|
1998-02-26
|
1KB
|
93 lines
; stack.s
; -------
; Stack opcodes
GET hdr.common
GET hdr.memory
GBLS value
GBLS r_p_temp
; Push specified register onto stack
MACRO
m_push $push_reg
NEW value
mov $value, $push_reg, lsr #24
write_byte_sp $value
DELETE value
MEND
; Push flags onto stack
MACRO
m_push_p
write_byte_sp r_p
MEND
; Pull specified register from stack
MACRO
m_pull $pull_reg
read_byte_sp $pull_reg
bic r_p, r_p, #N_FLAG + Z_FLAG
movs $pull_reg, $pull_reg, lsl #24
orreq r_p, r_p, #Z_FLAG
orrmi r_p, r_p, #N_FLAG
MEND
; Pull flags from stack
MACRO
m_pull_p
NEW r_p_temp
read_byte_sp $r_p_temp
bic r_p, r_p, #0xff
orr r_p, r_p, $r_p_temp
bic r_p, r_p, #T_FLAG ; *****
tst r_p, #I_FLAG ; check restored I_FLAG
orreq r_p, r_p, #0x80 << 16
orrne r_p, r_p, #0x80 << 16 ; update internal IRQ enable bit
DELETE r_p_temp
MEND
AREA |cpu$$opcodes|, CODE, READONLY
IMPORT Next_Opcode
DEF_OPCODE pha
m_push r_a
END_OPCODE
DEF_OPCODE php
m_push_p
END_OPCODE
DEF_OPCODE phx
m_push r_x
END_OPCODE
DEF_OPCODE phy
m_push r_y
END_OPCODE
DEF_OPCODE pla
m_pull r_a
END_OPCODE
DEF_OPCODE plp
m_pull_p
END_OPCODE
DEF_OPCODE plx
m_pull r_x
END_OPCODE
DEF_OPCODE ply
m_pull r_y
END_OPCODE
END