-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmacros.s
103 lines (87 loc) · 1.64 KB
/
macros.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# vim: set fileformat=unix filetype=gas tabstop=8 expandtab shiftwidth=4 autoindent :
.macro .wait_ppu
TST @$PPUCommand
BNE .-4
.endm
.macro .ppudo cmd:req,arg=0
.if \arg != 0
MOV \arg, @$PPUCommandArg
.endif
MOV \cmd, @$PPUCommand
.endm
.macro .ppudo_ensure cmd:req,arg=0
.wait_ppu
.ppudo \cmd, \arg
.endm
.macro .puts str_addr
.wait_ppu
.ppudo $PPU_Print,\str_addr
.wait_ppu
.endm
.macro .inform_and_hang str
.wait_ppu
.ppudo $PPU_PrintAt, $.+14
BR .
.byte 0,0
.asciz "\str"
.even
.endm
# generic macros
.macro call addr
JSR PC,\addr
.endm
.macro .call cond=none, dst:req # CALL cc,nn
.if \cond == "EQ" # equal (z)
BNE .+6
.elseif \cond == "ZE" # zero
BNE .+6
.elseif \cond == "NE" # not equal (nz)
BEQ .+6
.elseif \cond == "NZ" # not zero
BEQ .+6
.else
.error "Unknown condition for conditional call"
.endif
JSR PC,\dst
.endm
.macro .jmp cond=none, dst:req # JP cc,nn
.if \cond == "EQ" # equal (z)
BNE .+6
.elseif \cond == "ZE" # zero
BNE .+6
.elseif \cond == "NE" # not equal (nz)
BEQ .+6
.elseif \cond == "NZ" # not zero
BEQ .+6
.elseif \cond == "CC" # carry clear
BCS .+6
.elseif \cond == "CS" # carry set
BCC .+6
.else
.error "Unknown condition for conditional jump"
.endif
JMP \dst
.endm
.macro return
RTS PC
.endm
.macro push reg
MOV \reg,-(SP)
.endm
.macro pop reg
MOV (SP)+,\reg
.endm
.macro bze dst
BEQ \dst
.endm
.macro bnz dst
BNE \dst
.endm
# RT-11 dependent macros
.macro .exit
EMT 0350
.endm
.macro .tty_print addr
MOV \addr,R0
EMT 0351
.endm