-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathzsdmp.txt
267 lines (267 loc) · 6.35 KB
/
zsdmp.txt
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
; Recreation of P.XSDMP by ren14500.
TITLE 'SDMP'
SYSTEM ZSDMP (MAIN,EXP=D)
FILE SYS0:SYS000,CLASS=2,BUFFER=400,SECBUFF,KEY=SYS0KEY,FILTYP=?,LSR=5
SET SYS0KEY:-1
FILE CRT:SYSIPT,CLASS=0
FILE LST:SYSLST,CLASS=1
ENTRYPOINT CRT
EXTERNAL CGET, MSG, MSGN, YNGET, @HEX
ENTRY
OPEN IO CRT ; 8196
OPEN OUTPUT LST ; 819c
OPEN IO SYS0 ; 81a2
DIRECT
* Get full name of SYS0 file.
LDB= SYS0 ; 81a8
SVC 82 ; 81ab
DB 1 ; 81ad
DB 21 ; 81ae
DB 9 ; 81af
DW FULLNAME ; 81b0
* Get unit number of SYS0 file.
LDB= SYS0 ; 81b2
SVC 92 ; 81b5
DB 1 ; 81b7
DB 1 ; 81b8
DB 2 ; 81b9
DW UNITNUM+3 ; 81ba
CPL
WRITE(CRT, FMT1) STR1 ; 81bc
CALL YNGET(STR2) ; 81c6
IF (STATUS.EQ.0) GO TO SKIPFLAGS ; 81cb
FLAG1=FLAG2 ; 81d9
SKIPFLAGS:
CALL CGET(STR3, FMT2, INBUFF) ; 81ed
IFS (INBUFF.EQ.EMPTYSTR) GO TO EMPTYINPUT ; 81f6
DIRECT
* Remove trailing spaces from INBUFF.
LDX= INBUFF+5 ; 8205
LDAB= ' ' ; 8208
RMSPC LDBB- X- ; 820a
SABB ; 820c
BZ RMSPC ; 820d
CLAB ; 820f
INX ; 8210
STAB+ X ; 8211
CPL
IFS (INBUFF.NE.NSTR) GO TO NOTN ; 8212
INCR SYS0KEY ; 8221
GO TO GOODSEC ; 8227
NOTN:
IFS (INBUFF.NE.PSTR) GO TO NOTP ; 822a
DECR SYS0KEY ; 8239
IF (SYS0KEY.GE.0) GO TO GOODSEC ; 823f
SYS0KEY=0 ; 824d
GO TO GOODSEC ; 8260
NOTP:
DECODE(INBUFF, FMT3) SYS0KEY ; 8263
IF (SYS0KEY.GE.ZERO) GO TO GOODSEC ; 826d
SYS0KEY=0 ; 827c
GOODSEC:
DIRECT
* Read the sector.
LDAB= 1 ; 828f
STAB/ SYS0+3 ; 8291
LDB= SYS0 ; 8294
SVC 24 ; 8297
* Check status.
LDAB/ SYS0 ; 8299
BZ GOODREAD ; 829c
CPL
CALL MSG(STR4) ; 829e
GO TO SKIPFLAGS ; 82a3
GOODREAD:
CALL PRINTSEC ; 82a6
FLAG3=0 ; 82a9
LCPROMPT:
WRITE(CRT, FMT1) STR5 ; 82bc
READ(CRT, FMT6) LINE, COL ; 82c6
IF (STATUS.NE.ZERO) GO TO LCPROMPT ; 82d2
IF (LINE.NE.ZERO) GO TO COLCHECK ; 82e1
IF (COL.EQ.ZERO) GO TO NOCHANGE ; 82f0
COLCHECK:
IF (COL.LE.ZERO) GO TO LCPROMPT ; 82ff
IF (LINE.LT.ZERO) GO TO LCPROMPT ; 830e
FLAG3=1 ; 831d
LINE=LINE-FLAG2 ; 8330
COL=COL-FLAG2 ; 834b
SECOFF=LINE*FLAG4+COL ; 8366
IF (SECOFF.GE.SECSIZE) GO TO LCPROMPT ; 8388
SECREM=SECSIZE-SECOFF ; 8397
WRITE(CRT, FMT1) STR6 ; 83b2
READ(CRT, FMT7) DBUFF ; 83bc
DIRECT
* Get a pointer to the current byte.
LDA= SECDATA ; 83c6
LDB/ SECOFF+2 ; 83c9
AAB ; 83cc
STB/ CURRADDR ; 83cd
* Read each new value and overwrite the buffer.
LDA= DBUFF ; 83d0
XAY ; 83d3
MODLOOP LDAB+ Y+ ; 83d4
BZ MODDONE ; 83d6
LDBB= ' ' ; 83d8
SABB ; 83da
BZ MODDONE ; 83db
JSR/ UNHEXNIB ; 83dd
SLRB BL,4 ; 83e0
STBB/ CURRBYTE ; 83e2
LDAB+ Y+ ; 83e5
BZ MODDONE ; 83e7
LDBB= ' ' ; 83e9
SABB ; 83eb
BZ MODDONE ; 83ec
JSR/ UNHEXNIB ; 83ee
LDAB/ CURRBYTE ; 83f1
AABB ; 83f4
LDA/ CURRADDR ; 83f5
STBB+ A+ ; 83f8
STA/ CURRADDR ; 83fa
LDA/ SECREM+2 ; 83fd
DCA ; 8400
BZ MODDONE ; 8401
STA/ SECREM+2 ; 8403
JMP MODLOOP ; 8406
CPL
MODDONE:
CALL PRINTSEC ; 8408
NOCHANGE:
IF (FLAG3.EQ.0) GO TO SKIPFLAGS ; 840b
CALL YNGET(STR7) ; 8419
IF (STATUS.EQ.0) GO TO LCPROMPT ; 841c
DIRECT
* Write the updated sector to disk.
LDAB= 2 ; 842c
STAB/ SYS0+3 ; 842e
LDB= SYS0 ; 8431
SVC 24 ; 8434
CPL
GO TO SKIPFLAGS ; 8436
EMPTYINPUT:
WRITE(CRT, FMT1) STR8 ; 8439
STOP -1 ; 8443
SUBROUTINE PRINTSEC
WRITE(LST, FMT4) ; 8446
WRITE(LST, FMT5) STR9, FULLNAME, STR10, UNITNUM, STR11, SYS0KEY ; 844e
WRITE(LST, FMT4) STR12 ; 8462
COUNTER=ZERO ; 846c
DIRECT
* Convert data to ASCII hex digits.
LDAB= 16 ; 8480
ROWSREM STAB= 0 ; 8482
LDA= SECDATA ; 8484
XAY ; 8487
PSLOOP LDAB= 25 ; 8488
COLSREM STAB= 0 ; 848a
LDAB= 73 ; 848c
STAB ASCII+2 ; 848e
LDB= HBUFF ; 8490
CONVLOOP LDAB+ Y ; 8493
JSR/ @HEX ; 8494
STA+ B+ ; 8497
LDA= -1 ; 8499
LDAB+ Y+ ; 849c
SUBB AL,AU ; 849e
BZ PERIOD ; 84a0
LDA= ' ' ; 84a2
LDAB+ Y,-1 ; 84a5
SUBB AL,AU ; 84a8
BL ASCII ; 84aa
PERIOD LDAB= '.' ; 84ac
ASCII STAB+ B,73 ; 84ae
LDAB ASCII+2 ; 84b1
DCAB ; 84b3
DCAB ; 84b4
STAB ASCII+2 ; 84b5
LDAB= ' ' ; 84b7
STAB+ B+ ; 84b9
LDAB COLSREM+1 ; 84bb
DCAB ; 84bd
BZ ROWDONE ; 84be
STAB COLSREM+1 ; 84c0
JMP CONVLOOP ; 84c2
ROWDONE XFR Y,A ; 84c4
STA- S- ; 84c6
CPL
COUNTER=COUNTER+FLAG2 ; 84c8
IF (FLAG1.EQ.FLAG2) GO TO VIDEO ; 84e3
WRITE(LST, FMT4) ; 84f2
WRITE(LST, FMT4) HBUFF, COUNTER ; 84fa
GO TO WROTEROW ; 8506
VIDEO:
WRITE(LST, FMT8) HBUFF, COUNTER ; 8509
WROTEROW:
DIRECT
LDAB/ ROWSREM+1 ; 8515
DCAB ; 8518
BZ PSDONE ; 8519
STAB/ ROWSREM+1 ; 851b
LDA+ S+ ; 851e
XAY ; 8520
JMP/ PSLOOP ; 8521
PSDONE LDA+ S+ ; 8524
CPL
RETURN ; 8526
SUBROUTINE UNHEXNIB
DIRECT
XFRB AL,BU ; 8527
SLR B,2 ; 8529
BNL UHB09 ; 852b
LDBB= 9 ; 852d
AABB ; 852f
XFRB BL,AL ; 8530
UHB09 LDBB= X'0F' ; 8532
NABB ; 8534
CPL
RETURN ; 8535
DIRECT
CURRADDR DW 0 ; 8536
CURRBYTE DB 0 ; 8538
CPL
DEFINE STR1:'DISK TO PRINTER SECTOR DUMP' ; 8539
DEFINE STR3:'ENTER "N", "P", OR RELATIVE SECTOR NUMBER' ; 8555
DEFINE STR8:'END JOB SDMP' ; 857f
DEFINE STR5:'ENTER LINE#(01-16) & COLUMN#(01-25) FOR CHANGE OR LEAVE BLANK';858c
DEFINE STR6:'ENTER DATA (50 DIGITS OR LESS).' ; 85ca
DEFINE STR4:'** EOM ENCOUNTERED, INVALID COMMAND **' ; 85ea
DEFINE STR7:'DATA OK???' ; 8611
DEFINE STR9:'FILE NAME:' ; 861c
DEFINE STR10:'DISK:' ; 8627
DEFINE STR11:'RELATIVE SECTOR:' ; 862d
DEFINE STR2:'IS OUTPUT GOING TO VIDEO? Y/N' ; 863e
DEFINE UNUSED1:'Y' ; 865c
DEFINE UNUSED2:' ' ; 865e
DEFINE NSTR:'N' ; 8660
DEFINE PSTR:'P' ; 8662
DEFINE STR12:' 5 10 15 20 25' ; 8664
SET SECSIZE:400 ; 86af
SET FLAG4:25 ; 86b3
SET FLAG2:1 ; 86b7
SET FLAG1:0 ; 86bb
SET UNITNUM:0 ; 86bf
INTEGER COUNTER ; 86c3
INTEGER SECREM ; 86c7
INTEGER LINE ; 86cb
INTEGER COL ; 86cf
INTEGER SECOFF ; 86d3
INTEGER FLAG3 ; 86d7
STRING HBUFF(100) ; 86db
DIRECT
SECBUFF DW 400 ; 8740
SECDATA DS 401 ; 8742
CPL
STRING DBUFF(50) ; 88d3
STRING INBUFF(6) ; 8906
DEFINE EMPTYSTR:'' ; 890d
STRING FULLNAME(21) ; 890e
FORMAT FMT1:C80 ; 8924
FORMAT FMT4:C100,X1,N2 ; 8928
FORMAT FMT2:C5 ; 8932
FORMAT FMT6:N2,N2 ; 8936
FORMAT FMT8:C75,X1,N2 ; 893d
FORMAT FMT7:C50 ; 8947
FORMAT FMT3:N5 ; 894b
FORMAT FMT5:C10,X1,C21,X4,C5,N2,X4,C16,N4 ; 894f
END