-
Notifications
You must be signed in to change notification settings - Fork 93
Expand file tree
/
Copy pathlast
More file actions
161 lines (161 loc) · 2.69 KB
/
last
File metadata and controls
161 lines (161 loc) · 2.69 KB
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
.SKIP 4
*= BEGIN
COLDS JMP INIT ;COLD START MONITOR
WARMS JMP BRKE ;WARM START MONITOR
.SKIP 3
RDT JMP BASIN ;ALL INPUT THRU HERE
WRT JMP BSOUT ;ALL OUTPUT THRU HERE
.SKIP 3
; INSTALL EXTRA MONITOR COMMANDS
;
INIT SEI ;STOP IRQ'S
LDA WWLK ;INIT NEW BRK VECTOR
LDX WWLK+1
STA CBINV
STX CBINV+1
LDA CINV ;GET OLD IRQ VECTOR
LDX CINV+1
CMP WINTR ;CHANGED ALREADY ?
BNE INIT10 ;NO - GO CHANGE
CPX WINTR+1
BEQ INIT20 ;YES - LEAVE BE
INIT10 STA KEYS
STX KEYS+1
LDA WINTR ;INSTALL REPEAT KEYS
LDX WINTR+1
STA CINV
STX CINV+1
INIT20
LDA WCOLDS
LDX WCOLDS+1
CPX #$80 ;IN ROM ABOVE SCREEN ?
BCS INIT30
STA MEMSIZ
STX MEMSIZ+1
INIT30 LDA #$10 ;SET DELAYS FOR REPEAT
STA DELAY
STA REPDY
LDA #0
STA WSW ;DO A BREAK
STA RBUSY ;NOT BUSY
CLI ;ALLOW IRQ'S
BRK
.SKIP 4
BRKE
SEC
LDA PCL ;BACK UP ONE BYTE
SBC #1
STA PCL
LDA PCH
SBC #0
STA PCH
B5 JSR CRLF
LDX #'B ;SET X EQUAL TO B
B567 LDA #'*
JSR WRTWO
LDA #'R ;SET FOR R DISPLAY TO
; PERMIT IMMEDIATE
; ALTER FOLLOWING
; BREAKPOINT
BNE NWCMD ;ALWAYS
ERROPR LDA #$3F ;PRINT A "?" FOR AN ERROR
JSR WRT
STRT
JSR CRLF
STRT10 LDA #'. ;TYPE A PROMPTING '.'
JSR WRT
LDA #0 ;ZERO WRAP FLAG
STA WRAP
STA RBUSY ;NOT BUST NOW
LDX #$FF ;RESET THE STACK
TXS
ST1 JSR RDOC ;READ COMMAND. CHARACTER
; IS RETURNED IN A
CMP #'. ;IGNORE PROMPTING '.'
BEQ ST1
CMP #$20 ;IGNORE SPACES
BEQ ST1
.SKIP 3
; SEARCH FOR COMMANDS
;
NWCMD LDX #NCMDS-1
NW10 CMP CMDS,X
BNE NW20
STA SAVCMD
TXA ;MULT BY TWO
ASL A
TAX ;INDEX INTO DISPATCH TABLE
.SKIP 3
; DISPATCH TO COMMAND
;
LDA ADRS,X ;FAKE INDEXED JMP
STA TMP0
LDA ADRS+1,X ;PUSH ADR-1 AND RTS
STA TMP0+1
JMP (TMP0)
;
NW20 DEX
BPL NW10
BMI ERROPR ;CMD NOT FOUND ERROR
.SKIP 3
; DEC TMP0 OR TMP2
;
DECT2 LDX #2 ;DEC TMP2 WORD
BNE DEC30 ;ALWAYS
DECT0 LDX #0 ;DEC TMP0 WORD
DEC30 LDY TMP0,X ;A BORROW?
BNE DEC20 ;NO-SKIP
LDY TMP0+1,X ;A MEMORY WRAP
BNE DEC10 ;NO-SKIP
INC WRAP ;YES-SET FLAG
DEC10 DEC TMP0+1,X
DEC20 DEC TMP0,X
DRTS RTS
.SKIP 3
;DISASSEMBLE ONE LINE PRINT 9 SPACES
;
DISSPC LDA #0 ;PRINT ALL CHARS
STA PTCH
JSR DIS300 ;DIS. ONE
LDX #9 ;SET FOR 9 SPACES
.SKIP 3
;PRINT # OF SPACES=X
;
SPCX JSR SPACE
DEX
BNE SPCX
RTS
.SKIP 3
; EXCHANGE TMP REGISTERS
;
T0T10 LDX #2 ;EXCHANGE TMP0 WITH
T0T100 LDA TMP0-1,X ; TMP10
PHA
LDA TMP10-1,X
STA TMP0-1,X
PLA
STA TMP10-1,X
DEX
BNE T0T100
RTS
.SKIP 3
; DOUBLE SUBTRACT
; DIFF=LO DIFFERENCE
; Y=HI DIFFERENCE
; A=0 IF ZERO DIFFERENCE
;
DCT10 LDA TMP10 ;TMP10-TMP0
LDY TMP10+1
JMP DC10 ;SKIP OVER
DCMP LDA TMP2 ;TMP2-TMP0
LDY TMP2+1
DC10 SEC
SBC TMP0
STA DIFF
TYA ;HI BYTE IN Y
SBC TMP0+1
TAY ;SAVE HI RESULT IN Y
ORA DIFF ;OR LO FOR EQUAL TEST
RTS
.SKIP 5
.END