145 lines
3.2 KiB
C
145 lines
3.2 KiB
C
/*******************************************************/
|
|
// constanten
|
|
/*******************************************************/
|
|
.extern ___RAMBAR1
|
|
.extern _rt_cacr
|
|
.extern _rt_mod
|
|
.extern _rt_ssp
|
|
.extern _rt_usp
|
|
.extern _rt_vbr
|
|
.extern _d0_save
|
|
.extern _a7_save
|
|
|
|
ii_ss = 16
|
|
d0_off = 0
|
|
d1_off = 4
|
|
a0_off = 8
|
|
a1_off = 12
|
|
format_off = 16
|
|
sr_off = 18
|
|
ccr_off = 19
|
|
pc_off = 20
|
|
|
|
#define table 0x20000000-0x8000-0xF000*4 // Adresse Sprungtabelle -> 8000=Sprungbereich mod cod, 61k(ohne 0xFxxx!)x4= tabelle
|
|
|
|
/*******************************************************/
|
|
// allgemeine macros
|
|
/*******************************************************/
|
|
ii_end: .macro
|
|
move.l a0,pc_off(a7)
|
|
movem.l (a7),d0/d1/a0/a1
|
|
lea ii_ss(a7),a7
|
|
rte
|
|
.endm;
|
|
|
|
set_cc0:.macro
|
|
move.w ccr,d0
|
|
move.b d0,ccr_off(a7)
|
|
.endm;
|
|
|
|
ii_esr: .macro // geht nicht!!??
|
|
movem.l (a7),d0/d1/a0/a1
|
|
lea ii_ss+8(a7),a7 // stack erhöhen
|
|
move.w d0,_d0_save // d0.w sicheren
|
|
move.w -6(a7),d0 // sr holen
|
|
move.w d0,sr // sr setzen
|
|
nop
|
|
move.w _d0_save,d0 // d0.w zurück
|
|
.endm;
|
|
|
|
ii_end_mvm:.macro
|
|
move.l a0_off(a7),a0
|
|
lea 16(a7),a7
|
|
rte
|
|
.endm;
|
|
|
|
ii_endj:.macro
|
|
movem.l (a7),d0/d1/a0/a1 // register zurück
|
|
lea ii_ss(a7),a7 // korr
|
|
rte // ende
|
|
.endm;
|
|
|
|
set_nzvc:.macro // set ccr bits nzvc
|
|
move.w ccr,d1
|
|
bclr #4,d1
|
|
btst #4,ccr_off(a7)
|
|
beq snzvc2\@
|
|
bset #4,d1
|
|
snzvc2\@:
|
|
move.b d1,ccr_off(a7)
|
|
.endm;
|
|
|
|
set_cc1:.macro
|
|
move.w ccr,d1
|
|
move.b d1,ccr_off(a7)
|
|
.endm;
|
|
|
|
set_cc_b:.macro
|
|
move.w ccr,d1
|
|
btst #7,d0 // byt negativ?
|
|
beq set_cc_b2\@
|
|
bset #3,d1 // make negativ
|
|
set_cc_b2\@:
|
|
move.b d1,ccr_off(a7)
|
|
.endm;
|
|
|
|
set_cc_w:.macro
|
|
move.w ccr,d1
|
|
btst #15,d0 // byt negativ?
|
|
beq set_cc_w2\@
|
|
bset #3,d1 // make negativ
|
|
set_cc_w2\@:
|
|
move.b d1,ccr_off(a7)
|
|
.endm;
|
|
|
|
get_pc: .macro
|
|
lea.l (a0),a1
|
|
.endm;
|
|
|
|
//--------------------------------------------------------------------
|
|
ii_lset:.macro offs
|
|
lea table+\offs*4,a0
|
|
move.l #ii_\offs,(a0)
|
|
.endm;
|
|
ii_lset_dx:.macro // 0x1.22 -> z.B. 1=d,2=4 ->0xd040 -> 0xde40
|
|
ii_lset_dxg \1,\2
|
|
ii_lset_dxu \1,\2
|
|
.endm;
|
|
ii_lset_dxg:.macro // gerade: 0x1.22 -> z.B. 1=d,2=4 ->0xd040 -> 0xde40
|
|
lea table+0x\10\2*4,a0
|
|
move.l #ii_0x\10\2,(a0)
|
|
lea 0x800(a0),a0 // 4 * 0x200
|
|
move.l #ii_0x\12\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\14\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\16\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\18\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1a\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1c\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1e\2,(a0)
|
|
.endm;
|
|
ii_lset_dxu:.macro // ungerade: 0x1.22 -> z.B. 1=d,2=4 ->0xd140 -> 0xdf40
|
|
lea table+0x\11\2*4,a0
|
|
move.l #ii_0x\11\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\13\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\15\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\17\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\19\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1b\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1d\2,(a0)
|
|
lea 0x800(a0),a0
|
|
move.l #ii_0x\1f\2,(a0)
|
|
.endm;
|
|
|