.orig x0000
.fill E_BAD_TRAP; x0000
.fill E_BAD_TRAP; x0001
.fill E_BAD_TRAP; x0002
.fill E_BAD_TRAP; x0003
.fill E_BAD_TRAP; x0004
.fill E_BAD_TRAP; x0005
.fill E_BAD_TRAP; x0006
.fill E_BAD_TRAP; x0007
.fill E_BAD_TRAP; x0008
.fill E_BAD_TRAP; x0009
.fill E_BAD_TRAP; x000A
.fill E_BAD_TRAP; x000B
.fill E_BAD_TRAP; x000C
.fill E_BAD_TRAP; x000D
.fill E_BAD_TRAP; x000E
.fill E_BAD_TRAP; x000F
.fill E_BAD_TRAP; x0010
.fill E_BAD_TRAP; x0011
.fill E_BAD_TRAP; x0012
.fill E_BAD_TRAP; x0013
.fill E_BAD_TRAP; x0014
.fill E_BAD_TRAP; x0015
.fill E_BAD_TRAP; x0016
.fill E_BAD_TRAP; x0017
.fill E_BAD_TRAP; x0018
.fill E_BAD_TRAP; x0019
.fill E_BAD_TRAP; x001A
.fill E_BAD_TRAP; x001B
.fill E_BAD_TRAP; x001C
.fill E_BAD_TRAP; x001D
.fill E_BAD_TRAP; x001E
.fill E_BAD_TRAP; x001F
.fill TRAP_GETC; x0020
.fill TRAP_PUTC; x0021
.fill TRAP_PUTS; x0022
.fill TRAP_IN; x0023
.fill TRAP_PUTSP; x0024
.fill TRAP_HALT; x0025
.fill E_BAD_TRAP; x0026
.fill E_BAD_TRAP; x0027
.fill E_BAD_TRAP; x0028
.fill E_BAD_TRAP; x0029
.fill E_BAD_TRAP; x002A
.fill E_BAD_TRAP; x002B
.fill E_BAD_TRAP; x002C
.fill E_BAD_TRAP; x002D
.fill E_BAD_TRAP; x002E
.fill E_BAD_TRAP; x002F
.fill E_BAD_TRAP; x0030
.fill E_BAD_TRAP; x0031
.fill E_BAD_TRAP; x0032
.fill E_BAD_TRAP; x0033
.fill E_BAD_TRAP; x0034
.fill E_BAD_TRAP; x0035
.fill E_BAD_TRAP; x0036
.fill E_BAD_TRAP; x0037
.fill E_BAD_TRAP; x0038
.fill E_BAD_TRAP; x0039
.fill E_BAD_TRAP; x003A
.fill E_BAD_TRAP; x003B
.fill E_BAD_TRAP; x003C
.fill E_BAD_TRAP; x003D
.fill E_BAD_TRAP; x003E
.fill E_BAD_TRAP; x003F
.fill E_BAD_TRAP; x0040
.fill E_BAD_TRAP; x0041
.fill E_BAD_TRAP; x0042
.fill E_BAD_TRAP; x0043
.fill E_BAD_TRAP; x0044
.fill E_BAD_TRAP; x0045
.fill E_BAD_TRAP; x0046
.fill E_BAD_TRAP; x0047
.fill E_BAD_TRAP; x0048
.fill E_BAD_TRAP; x0049
.fill E_BAD_TRAP; x004A
.fill E_BAD_TRAP; x004B
.fill E_BAD_TRAP; x004C
.fill E_BAD_TRAP; x004D
.fill E_BAD_TRAP; x004E
.fill E_BAD_TRAP; x004F
.fill E_BAD_TRAP; x0050
.fill E_BAD_TRAP; x0051
.fill E_BAD_TRAP; x0052
.fill E_BAD_TRAP; x0053
.fill E_BAD_TRAP; x0054
.fill E_BAD_TRAP; x0055
.fill E_BAD_TRAP; x0056
.fill E_BAD_TRAP; x0057
.fill E_BAD_TRAP; x0058
.fill E_BAD_TRAP; x0059
.fill E_BAD_TRAP; x005A
.fill E_BAD_TRAP; x005B
.fill E_BAD_TRAP; x005C
.fill E_BAD_TRAP; x005D
.fill E_BAD_TRAP; x005E
.fill E_BAD_TRAP; x005F
.fill E_BAD_TRAP; x0060
.fill E_BAD_TRAP; x0061
.fill E_BAD_TRAP; x0062
.fill E_BAD_TRAP; x0063
.fill E_BAD_TRAP; x0064
.fill E_BAD_TRAP; x0065
.fill E_BAD_TRAP; x0066
.fill E_BAD_TRAP; x0067
.fill E_BAD_TRAP; x0068
.fill E_BAD_TRAP; x0069
.fill E_BAD_TRAP; x006A
.fill E_BAD_TRAP; x006B
.fill E_BAD_TRAP; x006C
.fill E_BAD_TRAP; x006D
.fill E_BAD_TRAP; x006E
.fill E_BAD_TRAP; x006F
.fill E_BAD_TRAP; x0070
.fill E_BAD_TRAP; x0071
.fill E_BAD_TRAP; x0072
.fill E_BAD_TRAP; x0073
.fill E_BAD_TRAP; x0074
.fill E_BAD_TRAP; x0075
.fill E_BAD_TRAP; x0076
.fill E_BAD_TRAP; x0077
.fill E_BAD_TRAP; x0078
.fill E_BAD_TRAP; x0079
.fill E_BAD_TRAP; x007A
.fill E_BAD_TRAP; x007B
.fill E_BAD_TRAP; x007C
.fill E_BAD_TRAP; x007D
.fill E_BAD_TRAP; x007E
.fill E_BAD_TRAP; x007F
.fill E_BAD_TRAP; x0080
.fill E_BAD_TRAP; x0081
.fill E_BAD_TRAP; x0082
.fill E_BAD_TRAP; x0083
.fill E_BAD_TRAP; x0084
.fill E_BAD_TRAP; x0085
.fill E_BAD_TRAP; x0086
.fill E_BAD_TRAP; x0087
.fill E_BAD_TRAP; x0088
.fill E_BAD_TRAP; x0089
.fill E_BAD_TRAP; x008A
.fill E_BAD_TRAP; x008B
.fill E_BAD_TRAP; x008C
.fill E_BAD_TRAP; x008D
.fill E_BAD_TRAP; x008E
.fill E_BAD_TRAP; x008F
.fill E_BAD_TRAP; x0090
.fill E_BAD_TRAP; x0091
.fill E_BAD_TRAP; x0092
.fill E_BAD_TRAP; x0093
.fill E_BAD_TRAP; x0094
.fill E_BAD_TRAP; x0095
.fill E_BAD_TRAP; x0096
.fill E_BAD_TRAP; x0097
.fill E_BAD_TRAP; x0098
.fill E_BAD_TRAP; x0099
.fill E_BAD_TRAP; x009A
.fill E_BAD_TRAP; x009B
.fill E_BAD_TRAP; x009C
.fill E_BAD_TRAP; x009D
.fill E_BAD_TRAP; x009E
.fill E_BAD_TRAP; x009F
.fill E_BAD_TRAP; x00A0
.fill E_BAD_TRAP; x00A1
.fill E_BAD_TRAP; x00A2
.fill E_BAD_TRAP; x00A3
.fill E_BAD_TRAP; x00A4
.fill E_BAD_TRAP; x00A5
.fill E_BAD_TRAP; x00A6
.fill E_BAD_TRAP; x00A7
.fill E_BAD_TRAP; x00A8
.fill E_BAD_TRAP; x00A9
.fill E_BAD_TRAP; x00AA
.fill E_BAD_TRAP; x00AB
.fill E_BAD_TRAP; x00AC
.fill E_BAD_TRAP; x00AD
.fill E_BAD_TRAP; x00AE
.fill E_BAD_TRAP; x00AF
.fill E_BAD_TRAP; x00B0
.fill E_BAD_TRAP; x00B1
.fill E_BAD_TRAP; x00B2
.fill E_BAD_TRAP; x00B3
.fill E_BAD_TRAP; x00B4
.fill E_BAD_TRAP; x00B5
.fill E_BAD_TRAP; x00B6
.fill E_BAD_TRAP; x00B7
.fill E_BAD_TRAP; x00B8
.fill E_BAD_TRAP; x00B9
.fill E_BAD_TRAP; x00BA
.fill E_BAD_TRAP; x00BB
.fill E_BAD_TRAP; x00BC
.fill E_BAD_TRAP; x00BD
.fill E_BAD_TRAP; x00BE
.fill E_BAD_TRAP; x00BF
.fill E_BAD_TRAP; x00C0
.fill E_BAD_TRAP; x00C1
.fill E_BAD_TRAP; x00C2
.fill E_BAD_TRAP; x00C3
.fill E_BAD_TRAP; x00C4
.fill E_BAD_TRAP; x00C5
.fill E_BAD_TRAP; x00C6
.fill E_BAD_TRAP; x00C7
.fill E_BAD_TRAP; x00C8
.fill E_BAD_TRAP; x00C9
.fill E_BAD_TRAP; x00CA
.fill E_BAD_TRAP; x00CB
.fill E_BAD_TRAP; x00CC
.fill E_BAD_TRAP; x00CD
.fill E_BAD_TRAP; x00CE
.fill E_BAD_TRAP; x00CF
.fill E_BAD_TRAP; x00D0
.fill E_BAD_TRAP; x00D1
.fill E_BAD_TRAP; x00D2
.fill E_BAD_TRAP; x00D3
.fill E_BAD_TRAP; x00D4
.fill E_BAD_TRAP; x00D5
.fill E_BAD_TRAP; x00D6
.fill E_BAD_TRAP; x00D7
.fill E_BAD_TRAP; x00D8
.fill E_BAD_TRAP; x00D9
.fill E_BAD_TRAP; x00DA
.fill E_BAD_TRAP; x00DB
.fill E_BAD_TRAP; x00DC
.fill E_BAD_TRAP; x00DD
.fill E_BAD_TRAP; x00DE
.fill E_BAD_TRAP; x00DF
.fill E_BAD_TRAP; x00E0
.fill E_BAD_TRAP; x00E1
.fill E_BAD_TRAP; x00E2
.fill E_BAD_TRAP; x00E3
.fill E_BAD_TRAP; x00E4
.fill E_BAD_TRAP; x00E5
.fill E_BAD_TRAP; x00E6
.fill E_BAD_TRAP; x00E7
.fill E_BAD_TRAP; x00E8
.fill E_BAD_TRAP; x00E9
.fill E_BAD_TRAP; x00EA
.fill E_BAD_TRAP; x00EB
.fill E_BAD_TRAP; x00EC
.fill E_BAD_TRAP; x00ED
.fill E_BAD_TRAP; x00EE
.fill E_BAD_TRAP; x00EF
.fill E_BAD_TRAP; x00F0
.fill E_BAD_TRAP; x00F1
.fill E_BAD_TRAP; x00F2
.fill E_BAD_TRAP; x00F3
.fill E_BAD_TRAP; x00F4
.fill E_BAD_TRAP; x00F5
.fill E_BAD_TRAP; x00F6
.fill E_BAD_TRAP; x00F7
.fill E_BAD_TRAP; x00F8
.fill E_BAD_TRAP; x00F9
.fill E_BAD_TRAP; x00FA
.fill E_BAD_TRAP; x00FB
.fill E_BAD_TRAP; x00FC
.fill E_BAD_TRAP; x00FD
.fill E_BAD_TRAP; x00FE
.fill E_BAD_TRAP; x00FF
.fill E_EXC_PRIVL; x0100
.fill E_EXC_ILLOP; x0101
.fill E_EXC_ACV; x0102
.fill E_BAD_INT; x0103
.fill E_BAD_INT; x0104
.fill E_BAD_INT; x0105
.fill E_BAD_INT; x0106
.fill E_BAD_INT; x0107
.fill E_BAD_INT; x0108
.fill E_BAD_INT; x0109
.fill E_BAD_INT; x010A
.fill E_BAD_INT; x010B
.fill E_BAD_INT; x010C
.fill E_BAD_INT; x010D
.fill E_BAD_INT; x010E
.fill E_BAD_INT; x010F
.fill E_BAD_INT; x0110
.fill E_BAD_INT; x0111
.fill E_BAD_INT; x0112
.fill E_BAD_INT; x0113
.fill E_BAD_INT; x0114
.fill E_BAD_INT; x0115
.fill E_BAD_INT; x0116
.fill E_BAD_INT; x0117
.fill E_BAD_INT; x0118
.fill E_BAD_INT; x0119
.fill E_BAD_INT; x011A
.fill E_BAD_INT; x011B
.fill E_BAD_INT; x011C
.fill E_BAD_INT; x011D
.fill E_BAD_INT; x011E
.fill E_BAD_INT; x011F
.fill E_BAD_INT; x0120
.fill E_BAD_INT; x0121
.fill E_BAD_INT; x0122
.fill E_BAD_INT; x0123
.fill E_BAD_INT; x0124
.fill E_BAD_INT; x0125
.fill E_BAD_INT; x0126
.fill E_BAD_INT; x0127
.fill E_BAD_INT; x0128
.fill E_BAD_INT; x0129
.fill E_BAD_INT; x012A
.fill E_BAD_INT; x012B
.fill E_BAD_INT; x012C
.fill E_BAD_INT; x012D
.fill E_BAD_INT; x012E
.fill E_BAD_INT; x012F
.fill E_BAD_INT; x0130
.fill E_BAD_INT; x0131
.fill E_BAD_INT; x0132
.fill E_BAD_INT; x0133
.fill E_BAD_INT; x0134
.fill E_BAD_INT; x0135
.fill E_BAD_INT; x0136
.fill E_BAD_INT; x0137
.fill E_BAD_INT; x0138
.fill E_BAD_INT; x0139
.fill E_BAD_INT; x013A
.fill E_BAD_INT; x013B
.fill E_BAD_INT; x013C
.fill E_BAD_INT; x013D
.fill E_BAD_INT; x013E
.fill E_BAD_INT; x013F
.fill E_BAD_INT; x0140
.fill E_BAD_INT; x0141
.fill E_BAD_INT; x0142
.fill E_BAD_INT; x0143
.fill E_BAD_INT; x0144
.fill E_BAD_INT; x0145
.fill E_BAD_INT; x0146
.fill E_BAD_INT; x0147
.fill E_BAD_INT; x0148
.fill E_BAD_INT; x0149
.fill E_BAD_INT; x014A
.fill E_BAD_INT; x014B
.fill E_BAD_INT; x014C
.fill E_BAD_INT; x014D
.fill E_BAD_INT; x014E
.fill E_BAD_INT; x014F
.fill E_BAD_INT; x0150
.fill E_BAD_INT; x0151
.fill E_BAD_INT; x0152
.fill E_BAD_INT; x0153
.fill E_BAD_INT; x0154
.fill E_BAD_INT; x0155
.fill E_BAD_INT; x0156
.fill E_BAD_INT; x0157
.fill E_BAD_INT; x0158
.fill E_BAD_INT; x0159
.fill E_BAD_INT; x015A
.fill E_BAD_INT; x015B
.fill E_BAD_INT; x015C
.fill E_BAD_INT; x015D
.fill E_BAD_INT; x015E
.fill E_BAD_INT; x015F
.fill E_BAD_INT; x0160
.fill E_BAD_INT; x0161
.fill E_BAD_INT; x0162
.fill E_BAD_INT; x0163
.fill E_BAD_INT; x0164
.fill E_BAD_INT; x0165
.fill E_BAD_INT; x0166
.fill E_BAD_INT; x0167
.fill E_BAD_INT; x0168
.fill E_BAD_INT; x0169
.fill E_BAD_INT; x016A
.fill E_BAD_INT; x016B
.fill E_BAD_INT; x016C
.fill E_BAD_INT; x016D
.fill E_BAD_INT; x016E
.fill E_BAD_INT; x016F
.fill E_BAD_INT; x0170
.fill E_BAD_INT; x0171
.fill E_BAD_INT; x0172
.fill E_BAD_INT; x0173
.fill E_BAD_INT; x0174
.fill E_BAD_INT; x0175
.fill E_BAD_INT; x0176
.fill E_BAD_INT; x0177
.fill E_BAD_INT; x0178
.fill E_BAD_INT; x0179
.fill E_BAD_INT; x017A
.fill E_BAD_INT; x017B
.fill E_BAD_INT; x017C
.fill E_BAD_INT; x017D
.fill E_BAD_INT; x017E
.fill E_BAD_INT; x017F
.fill E_BAD_INT; x0180
.fill E_BAD_INT; x0181
.fill E_BAD_INT; x0182
.fill E_BAD_INT; x0183
.fill E_BAD_INT; x0184
.fill E_BAD_INT; x0185
.fill E_BAD_INT; x0186
.fill E_BAD_INT; x0187
.fill E_BAD_INT; x0188
.fill E_BAD_INT; x0189
.fill E_BAD_INT; x018A
.fill E_BAD_INT; x018B
.fill E_BAD_INT; x018C
.fill E_BAD_INT; x018D
.fill E_BAD_INT; x018E
.fill E_BAD_INT; x018F
.fill E_BAD_INT; x0190
.fill E_BAD_INT; x0191
.fill E_BAD_INT; x0192
.fill E_BAD_INT; x0193
.fill E_BAD_INT; x0194
.fill E_BAD_INT; x0195
.fill E_BAD_INT; x0196
.fill E_BAD_INT; x0197
.fill E_BAD_INT; x0198
.fill E_BAD_INT; x0199
.fill E_BAD_INT; x019A
.fill E_BAD_INT; x019B
.fill E_BAD_INT; x019C
.fill E_BAD_INT; x019D
.fill E_BAD_INT; x019E
.fill E_BAD_INT; x019F
.fill E_BAD_INT; x01A0
.fill E_BAD_INT; x01A1
.fill E_BAD_INT; x01A2
.fill E_BAD_INT; x01A3
.fill E_BAD_INT; x01A4
.fill E_BAD_INT; x01A5
.fill E_BAD_INT; x01A6
.fill E_BAD_INT; x01A7
.fill E_BAD_INT; x01A8
.fill E_BAD_INT; x01A9
.fill E_BAD_INT; x01AA
.fill E_BAD_INT; x01AB
.fill E_BAD_INT; x01AC
.fill E_BAD_INT; x01AD
.fill E_BAD_INT; x01AE
.fill E_BAD_INT; x01AF
.fill E_BAD_INT; x01B0
.fill E_BAD_INT; x01B1
.fill E_BAD_INT; x01B2
.fill E_BAD_INT; x01B3
.fill E_BAD_INT; x01B4
.fill E_BAD_INT; x01B5
.fill E_BAD_INT; x01B6
.fill E_BAD_INT; x01B7
.fill E_BAD_INT; x01B8
.fill E_BAD_INT; x01B9
.fill E_BAD_INT; x01BA
.fill E_BAD_INT; x01BB
.fill E_BAD_INT; x01BC
.fill E_BAD_INT; x01BD
.fill E_BAD_INT; x01BE
.fill E_BAD_INT; x01BF
.fill E_BAD_INT; x01C0
.fill E_BAD_INT; x01C1
.fill E_BAD_INT; x01C2
.fill E_BAD_INT; x01C3
.fill E_BAD_INT; x01C4
.fill E_BAD_INT; x01C5
.fill E_BAD_INT; x01C6
.fill E_BAD_INT; x01C7
.fill E_BAD_INT; x01C8
.fill E_BAD_INT; x01C9
.fill E_BAD_INT; x01CA
.fill E_BAD_INT; x01CB
.fill E_BAD_INT; x01CC
.fill E_BAD_INT; x01CD
.fill E_BAD_INT; x01CE
.fill E_BAD_INT; x01CF
.fill E_BAD_INT; x01D0
.fill E_BAD_INT; x01D1
.fill E_BAD_INT; x01D2
.fill E_BAD_INT; x01D3
.fill E_BAD_INT; x01D4
.fill E_BAD_INT; x01D5
.fill E_BAD_INT; x01D6
.fill E_BAD_INT; x01D7
.fill E_BAD_INT; x01D8
.fill E_BAD_INT; x01D9
.fill E_BAD_INT; x01DA
.fill E_BAD_INT; x01DB
.fill E_BAD_INT; x01DC
.fill E_BAD_INT; x01DD
.fill E_BAD_INT; x01DE
.fill E_BAD_INT; x01DF
.fill E_BAD_INT; x01E0
.fill E_BAD_INT; x01E1
.fill E_BAD_INT; x01E2
.fill E_BAD_INT; x01E3
.fill E_BAD_INT; x01E4
.fill E_BAD_INT; x01E5
.fill E_BAD_INT; x01E6
.fill E_BAD_INT; x01E7
.fill E_BAD_INT; x01E8
.fill E_BAD_INT; x01E9
.fill E_BAD_INT; x01EA
.fill E_BAD_INT; x01EB
.fill E_BAD_INT; x01EC
.fill E_BAD_INT; x01ED
.fill E_BAD_INT; x01EE
.fill E_BAD_INT; x01EF
.fill E_BAD_INT; x01F0
.fill E_BAD_INT; x01F1
.fill E_BAD_INT; x01F2
.fill E_BAD_INT; x01F3
.fill E_BAD_INT; x01F4
.fill E_BAD_INT; x01F5
.fill E_BAD_INT; x01F6
.fill E_BAD_INT; x01F7
.fill E_BAD_INT; x01F8
.fill E_BAD_INT; x01F9
.fill E_BAD_INT; x01FA
.fill E_BAD_INT; x01FB
.fill E_BAD_INT; x01FC
.fill E_BAD_INT; x01FD
.fill E_BAD_INT; x01FE
.fill E_BAD_INT; x01FF
.end
.orig x0200
E_BAD_TRAP:
LEA R0, S_BAD_TRAP
PUTS
HALT
S_BAD_TRAP: .stringz "\n--- Bad trap executed ---"
E_BAD_INT:
LEA R0, S_BAD_INT
PUTS
RTI
S_BAD_INT: .stringz "\n--- Missing interrupt handler ---"
TRAP_GETC:
GETC_POLL_KBSR:
LDI R0, KBSR
BRzp GETC_POLL_KBSR
LDI R0, KBDR
RTI
TRAP_PUTC:
ADD R6, R6, #-1; push R0
STR R0, R6, #0
; poll until display is ready
PUTC_POLL_DSR:
LDI R0, DSR
BRzp PUTC_POLL_DSR
LDR R0, R6, #0; pop R0
ADD R6, R6, #1
STI R0, DDR
RTI
TRAP_PUTS:
ADD R6, R6, #-1; push R0
STR R0, R6, #0
ADD R6, R6, #-1; push R1
STR R1, R6, #0
;; let R1 = string + i
;; let R0 = *(string + i)
ADD R1, R0, #0
PUTS_LOOP:
LDR R0, R1, #0
BRz PUTS_END_LOOP
PUTC
ADD R1, R1, #1
BR PUTS_LOOP
PUTS_END_LOOP:
LDR R1, R6, #0; pop R1
ADD R6, R6, #1
LDR R0, R6, #0; pop R0
ADD R6, R6, #1
RTI
TRAP_IN:
LEA R0, S_IN_PROMPT
PUTS
GETC
PUTC
RTI
S_IN_PROMPT: .stringz "Input character: "
TRAP_PUTSP:
ADD R6, R6, #-1; push R0
STR R0, R6, #0
ADD R6, R6, #-1; push R1
STR R1, R6, #0
ADD R6, R6, #-1; push R2
STR R2, R6, #0
ADD R6, R6, #-1; push R3
STR R3, R6, #0
;; let R0 = next char to read
;; let R1 = string + i
;; let R2 = *(string + i)
ADD R1, R0, #0
PUTSP_LOOP:
LDR R2, R1, #0 ;; load the next two characters
;; push first character
LD R0, PUTSP_MASK
AND R0, R2, R0
BRz PUTSP_END_LOOP
PUTC
;; get second character in R0
AND R0, R0, #0
AND R3, R3, #0
ADD R3, R3, #8 ;; for (R3 = 8; R3 > 0; R3--)
PUTSP_GET_HIGH_8:
;; let R0 = result of (R2 >> 8)
;; SHL algo:
;; perform 8 times:
;; R0 << 1
;; check MSB of R2, copy the result into R0
;; R2 << 1
ADD R3, R3, #0
BRnz PUTSP_END_GET_HIGH_8
ADD R0, R0, R0
ADD R2, R2, #0
BRzp PUTSP_GH8_SHL_R2
ADD R0, R0, #1
PUTSP_GH8_SHL_R2:
ADD R2, R2, R2
ADD R3, R3, #-1
BR PUTSP_GET_HIGH_8
PUTSP_END_GET_HIGH_8:
;; print second character
ADD R0, R0, #0
BRz PUTSP_END_LOOP
PUTC
ADD R1, R1, #1
BR PUTSP_LOOP
PUTSP_END_LOOP:
LDR R3, R6, #0; pop R3
ADD R6, R6, #1
LDR R2, R6, #0; pop R2
ADD R6, R6, #1
LDR R1, R6, #0; pop R1
ADD R6, R6, #1
LDR R0, R6, #0; pop R0
ADD R6, R6, #1
RTI
PUTSP_MASK: .fill x00FF
TRAP_HALT:
AND R7, R7, #0
STI R7, MCR
BR TRAP_HALT
KBSR: .fill xFE00
KBDR: .fill xFE02
DSR: .fill xFE04
DDR: .fill xFE06
MCR: .fill xFFFE
E_EXC_PRIVL:
LEA R0, S_EXC_PRIVL
PUTS
HALT
S_EXC_PRIVL: .stringz "\n--- Privilege violation ---"
E_EXC_ILLOP:
LEA R0, S_EXC_ILLOP
PUTS
HALT
S_EXC_ILLOP: .stringz "\n--- Illegal opcode ---"
E_EXC_ACV:
LEA R0, S_EXC_ACV
PUTS
HALT
S_EXC_ACV: .stringz "\n--- Access violation ---"
.end