📄 t-macros.i
字号:
.macro start .text .align 2 .globl _start_start: ldi r0, 0 .endm .macro exit47 ldi r4, 1 ldi r0, 47 trap 15 .endm .macro exit0 ldi r4, 1 ldi r0, 0 trap 15 .endm .macro exit1 ldi r4, 1 ldi r0, 1 trap 15 .endm .macro exit2 ldi r4, 1 ldi r0, 2 trap 15 .endm .macro load reg val ldi \reg, #\val .endm .macro load2w reg hi lo ld2w \reg, @(1f,r0) .data .align 21: .short \hi .short \lo .text .endm .macro check exit reg val cmpeqi \reg, #\val brf0t 1f0: ldi r4, 1 ldi r0, \exit trap 151: .endm .macro check2w2 exit reg hi lo st2w \reg, @(1f,r0) ld r2, @(1f, r0) cmpeqi r2, #\hi brf0f 0f ld r2, @(1f + 2, r0) cmpeqi r2, #\lo brf0f 0f bra 2f0: ldi r4, 1 ldi r0, \exit trap 15 .data .align 21: .long 0 .text2: .endm .macro loadacc2 acc guard hi lo ldi r2, #\lo mvtaclo r2, \acc ldi r2, #\hi mvtachi r2, \acc ldi r2, #\guard mvtacg r2, \acc .endm .macro checkacc2 exit acc guard hi lo ldi r2, #\guard mvfacg r3, \acc cmpeq r2, r3 brf0f 0f ldi r2, #\hi mvfachi r3, \acc cmpeq r2, r3 brf0f 0f ldi r2, #\lo mvfaclo r3, \acc cmpeq r2, r3 brf0f 0f bra 4f0: ldi r4, 1 ldi r0, \exit trap 154: .endm .macro loadpsw2 val ldi r2, #\val mvtc r2, cr0 .endm .macro checkpsw2 exit val mvfc r2, cr0 cmpeqi r2, #\val brf0t 1f ldi r4, 1 ldi r0, \exit trap 151: .endm .macro hello ;; 4:write (1, string, strlen (string)) ldi r4, 4 ldi r0, 1 ldi r1, 1f ldi r2, 2f-1f-1 trap 15 .section .rodata1: .string "Hello World!\n"2: .align 2 .text .endm;;; Blat our DMAP registers so that they point at on-chip imem .macro point_dmap_at_imem .text ldi r2, MAP_INSN | 0xf st r2, @(DMAP_REG,r0) ldi r2, MAP_INSN st r2, @(IMAP1_REG,r0) .endm;;; Patch VEC so that it jumps back to code that checks PSW;;; and then exits with success. .macro check_interrupt vec psw src;;; Patch the interrupt vector's AE entry with a jmp to success .text ldi r4, #1f ldi r5, \vec ;; ld2w r2, @(0,r4) st2w r2, @(0,r5) ld2w r2, @(4,r4) st2w r2, @(4,r5) ;; bra 9f nop;;; Code that gets patched into the interrupt vector .data1: ldi r1, 2f@word jmp r1;;; Successfull trap jumps back to here .text;;; Verify the PSW2: mvfc r2, cr0 cmpeqi r2, #\psw brf0t 3f nop exit1;;; Verify the original addr3: mvfc r2, bpc cmpeqi r2, #\src@word brf0t 4f exit24: exit0;;; continue as normal9: .endm PSW_SM = 0x8000 PSW_01 = 0x4000 PSW_EA = 0x2000 PSW_DB = 0x1000 PSW_DM = 0x0800 PSW_IE = 0x0400 PSW_RP = 0x0200 PSW_MD = 0x0100 PSW_FX = 0x0080 PSW_ST = 0x0040 PSW_10 = 0x0020 PSW_11 = 0x0010 PSW_F0 = 0x0008 PSW_F1 = 0x0004 PSW_14 = 0x0002 PSW_C = 0x0001;;; DMAP_MASK = 0x3fff DMAP_BASE = 0x8000 DMAP_REG = 0xff04 IMAP0_REG = 0xff00 IMAP1_REG = 0xff02 MAP_INSN = 0x1000;;; VEC_RI = 0x3ff00 VEC_BAE = 0x3ff04 VEC_RIE = 0x3ff08 VEC_AE = 0x3ff0c VEC_TRAP = 0x3ff10 VEC_DBT = 0x3ff50 VEC_SDBT = 0x3fff4 VEC_DBI = 0x3ff58 VEC_EI = 0x3ff5c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -