annotate level1/cmds/padrom.asm @ 2758:e4a0f58a5f9b

Found that people who do not have the envirornment variable NITROS9DIR set before building the project get a error missing file "/rules.mak". Found this is caused do to the fact that the code to set this envirornment variable is in the rules.mak which can't get loaded. To fix this the code needed to set the envirornment variable that is in the rules.mak is now in the makefile(s) right before the include for the rules.mak file. This should fix the problem for those who do not have the NITROS9DIR envirornment variable preset.
author drencor-xeen
date Mon, 14 Jan 2013 14:37:46 -0600
parents 20841f236e32
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1336
b718065f2629 New utility
boisy
parents:
diff changeset
1 ********************************************************************
b718065f2629 New utility
boisy
parents:
diff changeset
2 * PadROM - ROM padding utility
b718065f2629 New utility
boisy
parents:
diff changeset
3 *
b718065f2629 New utility
boisy
parents:
diff changeset
4 * $Id$
b718065f2629 New utility
boisy
parents:
diff changeset
5 *
b718065f2629 New utility
boisy
parents:
diff changeset
6 * Edt/Rev YYYY/MM/DD Modified by
b718065f2629 New utility
boisy
parents:
diff changeset
7 * Comment
b718065f2629 New utility
boisy
parents:
diff changeset
8 * ------------------------------------------------------------------
b718065f2629 New utility
boisy
parents:
diff changeset
9 * 1 2003/09/06 Boisy G. Pitre
b718065f2629 New utility
boisy
parents:
diff changeset
10 * Started.
b718065f2629 New utility
boisy
parents:
diff changeset
11
b718065f2629 New utility
boisy
parents:
diff changeset
12 nam PadROM
b718065f2629 New utility
boisy
parents:
diff changeset
13 ttl ROM padding utility
b718065f2629 New utility
boisy
parents:
diff changeset
14
b718065f2629 New utility
boisy
parents:
diff changeset
15 ifp1
b718065f2629 New utility
boisy
parents:
diff changeset
16 use defsfile
b718065f2629 New utility
boisy
parents:
diff changeset
17 endc
b718065f2629 New utility
boisy
parents:
diff changeset
18
b718065f2629 New utility
boisy
parents:
diff changeset
19 * Here are some tweakable options
b718065f2629 New utility
boisy
parents:
diff changeset
20 DOHELP set 0 1 = include help info
b718065f2629 New utility
boisy
parents:
diff changeset
21 STACKSZ set 128 estimated stack size in bytes
b718065f2629 New utility
boisy
parents:
diff changeset
22 PARMSZ set 256 estimated parameter size in bytes
b718065f2629 New utility
boisy
parents:
diff changeset
23
b718065f2629 New utility
boisy
parents:
diff changeset
24 * Module header definitions
b718065f2629 New utility
boisy
parents:
diff changeset
25 tylg set Prgrm+Objct
b718065f2629 New utility
boisy
parents:
diff changeset
26 atrv set ReEnt+rev
b718065f2629 New utility
boisy
parents:
diff changeset
27 rev set $00
b718065f2629 New utility
boisy
parents:
diff changeset
28 edition set 1
b718065f2629 New utility
boisy
parents:
diff changeset
29
b718065f2629 New utility
boisy
parents:
diff changeset
30 mod eom,name,tylg,atrv,start,size
b718065f2629 New utility
boisy
parents:
diff changeset
31
b718065f2629 New utility
boisy
parents:
diff changeset
32 * Your utility's static storage vars go here
b718065f2629 New utility
boisy
parents:
diff changeset
33 org 0
b718065f2629 New utility
boisy
parents:
diff changeset
34 * These vars are used by the base template and shouldn't be removed
b718065f2629 New utility
boisy
parents:
diff changeset
35 parmptr rmb 2 pointer to our command line params
b718065f2629 New utility
boisy
parents:
diff changeset
36 filecnt rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
37 * These vars are used for this example, it will probably change for you
b718065f2629 New utility
boisy
parents:
diff changeset
38 hexcnt rmb 1 used by hex routine
b718065f2629 New utility
boisy
parents:
diff changeset
39 hexvalue rmb 2 maximum size is $FFFF
b718065f2629 New utility
boisy
parents:
diff changeset
40 openmode rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
41 openpath rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
42 filesize rmb 2
b718065f2629 New utility
boisy
parents:
diff changeset
43 gota rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
44 gotb rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
45 padbyte rmb 1
b718065f2629 New utility
boisy
parents:
diff changeset
46 padpage rmb 256
b718065f2629 New utility
boisy
parents:
diff changeset
47 cleartop equ .
b718065f2629 New utility
boisy
parents:
diff changeset
48 rmb STACKSZ+PARMSZ
b718065f2629 New utility
boisy
parents:
diff changeset
49 size equ .
b718065f2629 New utility
boisy
parents:
diff changeset
50
b718065f2629 New utility
boisy
parents:
diff changeset
51 * The utility name and edition goes here
b718065f2629 New utility
boisy
parents:
diff changeset
52 name fcs /PadROM/
b718065f2629 New utility
boisy
parents:
diff changeset
53 fcb edition
b718065f2629 New utility
boisy
parents:
diff changeset
54
b718065f2629 New utility
boisy
parents:
diff changeset
55 * Place constant strings here
b718065f2629 New utility
boisy
parents:
diff changeset
56 IFNE DOHELP
b718065f2629 New utility
boisy
parents:
diff changeset
57 HlpMsg fcb C$LF
b718065f2629 New utility
boisy
parents:
diff changeset
58 fcc /Use: NGU [<opts>] <path> [<path>] [<opts>]/
b718065f2629 New utility
boisy
parents:
diff changeset
59 fcb C$LF
b718065f2629 New utility
boisy
parents:
diff changeset
60 fcc / -a option 1/
b718065f2629 New utility
boisy
parents:
diff changeset
61 fcb C$LF
b718065f2629 New utility
boisy
parents:
diff changeset
62 fcc / -b option 2/
b718065f2629 New utility
boisy
parents:
diff changeset
63 fcb C$LF
b718065f2629 New utility
boisy
parents:
diff changeset
64 fcc / -c=f option 3/
b718065f2629 New utility
boisy
parents:
diff changeset
65 fcb C$LF
b718065f2629 New utility
boisy
parents:
diff changeset
66 CR fcb C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
67 HlpMsgL equ *-HlpMsg
b718065f2629 New utility
boisy
parents:
diff changeset
68 ENDC
b718065f2629 New utility
boisy
parents:
diff changeset
69 BadSize fcc /padrom only pads up to $FFFF bytes/
b718065f2629 New utility
boisy
parents:
diff changeset
70 fcb C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
71 BadSizeL equ *-BadSize
b718065f2629 New utility
boisy
parents:
diff changeset
72 BadPad fcc /file size exceeds pad size/
b718065f2629 New utility
boisy
parents:
diff changeset
73 fcb C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
74 BadPadL equ *-BadPad
b718065f2629 New utility
boisy
parents:
diff changeset
75 UnkOpt fcc /unknown option: /
b718065f2629 New utility
boisy
parents:
diff changeset
76 UnkOptL equ *-UnkOpt
b718065f2629 New utility
boisy
parents:
diff changeset
77
b718065f2629 New utility
boisy
parents:
diff changeset
78 * Here's how registers are set when this process is forked:
b718065f2629 New utility
boisy
parents:
diff changeset
79 *
b718065f2629 New utility
boisy
parents:
diff changeset
80 * +-----------------+ <-- Y (highest address)
b718065f2629 New utility
boisy
parents:
diff changeset
81 * ! Parameter !
b718065f2629 New utility
boisy
parents:
diff changeset
82 * ! Area !
b718065f2629 New utility
boisy
parents:
diff changeset
83 * +-----------------+ <-- X, SP
b718065f2629 New utility
boisy
parents:
diff changeset
84 * ! Data Area !
b718065f2629 New utility
boisy
parents:
diff changeset
85 * +-----------------+
b718065f2629 New utility
boisy
parents:
diff changeset
86 * ! Direct Page !
b718065f2629 New utility
boisy
parents:
diff changeset
87 * +-----------------+ <-- U, DP (lowest address)
b718065f2629 New utility
boisy
parents:
diff changeset
88 *
b718065f2629 New utility
boisy
parents:
diff changeset
89 * D = parameter area size
b718065f2629 New utility
boisy
parents:
diff changeset
90 * PC = module entry point abs. address
b718065f2629 New utility
boisy
parents:
diff changeset
91 * CC = F=0, I=0, others undefined
b718065f2629 New utility
boisy
parents:
diff changeset
92
b718065f2629 New utility
boisy
parents:
diff changeset
93 * The start of the program is here.
b718065f2629 New utility
boisy
parents:
diff changeset
94 * Before any command line processing is done, we clear out
b718065f2629 New utility
boisy
parents:
diff changeset
95 * our static memory from U to cleartop, then determine the
b718065f2629 New utility
boisy
parents:
diff changeset
96 * size of our data area (minus the stack).
b718065f2629 New utility
boisy
parents:
diff changeset
97 start subd #$0001 subtract 1 from D (param length)
b718065f2629 New utility
boisy
parents:
diff changeset
98 lbeq ShowHelp if zero, no params were on line
b718065f2629 New utility
boisy
parents:
diff changeset
99
b718065f2629 New utility
boisy
parents:
diff changeset
100 pshs u,x save registers for later
b718065f2629 New utility
boisy
parents:
diff changeset
101 leax cleartop,u point to end of area to zero out
b718065f2629 New utility
boisy
parents:
diff changeset
102 IFNE H6309
b718065f2629 New utility
boisy
parents:
diff changeset
103 subr u,x subtract U from X
b718065f2629 New utility
boisy
parents:
diff changeset
104 tfr x,w and put X in W
b718065f2629 New utility
boisy
parents:
diff changeset
105 clr ,-s put a zero on the stack
b718065f2629 New utility
boisy
parents:
diff changeset
106 tfm s,u+ and use TFM to clear starting at U
b718065f2629 New utility
boisy
parents:
diff changeset
107 leas 1,s clean up the stack
b718065f2629 New utility
boisy
parents:
diff changeset
108 ELSE
b718065f2629 New utility
boisy
parents:
diff changeset
109 pshs x save end pointer on stack
b718065f2629 New utility
boisy
parents:
diff changeset
110 clrnxt clr ,u+ clear out
b718065f2629 New utility
boisy
parents:
diff changeset
111 cmpu ,s done?
b718065f2629 New utility
boisy
parents:
diff changeset
112 bne clrnxt branch if not
b718065f2629 New utility
boisy
parents:
diff changeset
113 leas 2,s else clear stack
b718065f2629 New utility
boisy
parents:
diff changeset
114 ENDC
b718065f2629 New utility
boisy
parents:
diff changeset
115 puls x,u and restore our earlier saved registers
b718065f2629 New utility
boisy
parents:
diff changeset
116
b718065f2629 New utility
boisy
parents:
diff changeset
117 InitVars stx <parmptr save parameter pointer
b718065f2629 New utility
boisy
parents:
diff changeset
118 lda #UPDAT. get default open mode
b718065f2629 New utility
boisy
parents:
diff changeset
119 sta <openmode and save it
b718065f2629 New utility
boisy
parents:
diff changeset
120 lda #$FF
b718065f2629 New utility
boisy
parents:
diff changeset
121 sta <padbyte assume a default pad byte
b718065f2629 New utility
boisy
parents:
diff changeset
122
b718065f2629 New utility
boisy
parents:
diff changeset
123 * At this point we have determined our buffer space and saved pointers
b718065f2629 New utility
boisy
parents:
diff changeset
124 * for later use. Now we will parse the command line for options that
b718065f2629 New utility
boisy
parents:
diff changeset
125 * begin with a dash.
b718065f2629 New utility
boisy
parents:
diff changeset
126 * Note that X will NOT point to a space, but to either a CR (if no
b718065f2629 New utility
boisy
parents:
diff changeset
127 * parameters were passed) or the first non-space character of the
b718065f2629 New utility
boisy
parents:
diff changeset
128 * parameter.
b718065f2629 New utility
boisy
parents:
diff changeset
129 * Here we merely grab the byte at X into A and test for end of line,
b718065f2629 New utility
boisy
parents:
diff changeset
130 * exiting if so. Utilities that don't require arguments should
b718065f2629 New utility
boisy
parents:
diff changeset
131 * comment out the following three lines.
b718065f2629 New utility
boisy
parents:
diff changeset
132 GetChar lda ,x+ get next character on cmd line
b718065f2629 New utility
boisy
parents:
diff changeset
133 cmpa #C$CR CR?
b718065f2629 New utility
boisy
parents:
diff changeset
134 beq DoPadROM if so, do whatever this utility does
b718065f2629 New utility
boisy
parents:
diff changeset
135 cmpa #'- is it an option?
b718065f2629 New utility
boisy
parents:
diff changeset
136 beq GetDash if so, process it
b718065f2629 New utility
boisy
parents:
diff changeset
137 inc <filecnt else must be a non-option argument (file)
b718065f2629 New utility
boisy
parents:
diff changeset
138 lbsr SkipNSpc move past the argument
b718065f2629 New utility
boisy
parents:
diff changeset
139 ChkDash lbsr SkipSpcs and any following spaces
b718065f2629 New utility
boisy
parents:
diff changeset
140 bra GetChar start processing again
b718065f2629 New utility
boisy
parents:
diff changeset
141 GetDash clr -1,x wipe out the dash from the cmd line
b718065f2629 New utility
boisy
parents:
diff changeset
142 GetDash2 ldd ,x+ load option char and char following
b718065f2629 New utility
boisy
parents:
diff changeset
143 ora #$20 make lowercase
b718065f2629 New utility
boisy
parents:
diff changeset
144 IsItX cmpa #'x is it this option?
b718065f2629 New utility
boisy
parents:
diff changeset
145 bne IsItC branch if not
b718065f2629 New utility
boisy
parents:
diff changeset
146 lda #EXEC.+UPDAT.
b718065f2629 New utility
boisy
parents:
diff changeset
147 sta <openmode
b718065f2629 New utility
boisy
parents:
diff changeset
148 bra FixCmdLn
b718065f2629 New utility
boisy
parents:
diff changeset
149 IsItC cmpa #'c is it this option?
b718065f2629 New utility
boisy
parents:
diff changeset
150 bne BadOpt branch if not
b718065f2629 New utility
boisy
parents:
diff changeset
151 cmpb #'= 2nd char =?
b718065f2629 New utility
boisy
parents:
diff changeset
152 lbne ShowHelp show help if not
b718065f2629 New utility
boisy
parents:
diff changeset
153 clr -$01,x write over c
b718065f2629 New utility
boisy
parents:
diff changeset
154 clr ,x+ and = sign, inc X to dest dir
b718065f2629 New utility
boisy
parents:
diff changeset
155 * check for valid char after -c=
b718065f2629 New utility
boisy
parents:
diff changeset
156 lbsr Hex2Int get value of hex pad char
b718065f2629 New utility
boisy
parents:
diff changeset
157 lda <hexvalue+1
b718065f2629 New utility
boisy
parents:
diff changeset
158 sta <padbyte save pad character byte
b718065f2629 New utility
boisy
parents:
diff changeset
159 lda ,x get char at X (should be space or CR)
b718065f2629 New utility
boisy
parents:
diff changeset
160 cmpa #C$SPAC
b718065f2629 New utility
boisy
parents:
diff changeset
161 beq ChkDash
b718065f2629 New utility
boisy
parents:
diff changeset
162 cmpa #C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
163 beq ChkDash
b718065f2629 New utility
boisy
parents:
diff changeset
164 lbra ShowHelp neither, so show help
b718065f2629 New utility
boisy
parents:
diff changeset
165
b718065f2629 New utility
boisy
parents:
diff changeset
166 FixCmdLn clr -$01,x wipe out option character
b718065f2629 New utility
boisy
parents:
diff changeset
167 cmpb #'0
b718065f2629 New utility
boisy
parents:
diff changeset
168 blt ChkDash start dash option processing again
b718065f2629 New utility
boisy
parents:
diff changeset
169 bra GetDash possibly another option following?
b718065f2629 New utility
boisy
parents:
diff changeset
170
b718065f2629 New utility
boisy
parents:
diff changeset
171 * We branch here if we encounter an unknown option character
b718065f2629 New utility
boisy
parents:
diff changeset
172 * A = bad option character
b718065f2629 New utility
boisy
parents:
diff changeset
173 BadOpt leax UnkOpt,pcr
b718065f2629 New utility
boisy
parents:
diff changeset
174 ldy #UnkOptL
b718065f2629 New utility
boisy
parents:
diff changeset
175 ldb #C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
176 pshs d save bad option and CR on stack
b718065f2629 New utility
boisy
parents:
diff changeset
177 lda #$02 stderr
b718065f2629 New utility
boisy
parents:
diff changeset
178 os9 I$Write
b718065f2629 New utility
boisy
parents:
diff changeset
179 leax ,s point X at option char on stack
b718065f2629 New utility
boisy
parents:
diff changeset
180 os9 I$WritLn print option and CR
b718065f2629 New utility
boisy
parents:
diff changeset
181 puls d clean up stack
b718065f2629 New utility
boisy
parents:
diff changeset
182 lbra ShowHelp
b718065f2629 New utility
boisy
parents:
diff changeset
183
b718065f2629 New utility
boisy
parents:
diff changeset
184
b718065f2629 New utility
boisy
parents:
diff changeset
185 * At this point options are processed.
b718065f2629 New utility
boisy
parents:
diff changeset
186 * We load X with our parameter pointer and go down the command line
b718065f2629 New utility
boisy
parents:
diff changeset
187 * looking at each file to process (options have been wiped out with
b718065f2629 New utility
boisy
parents:
diff changeset
188 * spaces)
b718065f2629 New utility
boisy
parents:
diff changeset
189 *
b718065f2629 New utility
boisy
parents:
diff changeset
190 * Note, the following two instructions may not be needed, depending on
b718065f2629 New utility
boisy
parents:
diff changeset
191 * if your utility requires a non-option on the command line.
b718065f2629 New utility
boisy
parents:
diff changeset
192 DoPadROM
b718065f2629 New utility
boisy
parents:
diff changeset
193 * Before processing any parameters, fill <padpage with <padchar
b718065f2629 New utility
boisy
parents:
diff changeset
194 clrb
b718065f2629 New utility
boisy
parents:
diff changeset
195 lda <padbyte
b718065f2629 New utility
boisy
parents:
diff changeset
196 leax padpage,u
b718065f2629 New utility
boisy
parents:
diff changeset
197 fillpage sta ,x+
b718065f2629 New utility
boisy
parents:
diff changeset
198 decb
b718065f2629 New utility
boisy
parents:
diff changeset
199 bne fillpage
b718065f2629 New utility
boisy
parents:
diff changeset
200
b718065f2629 New utility
boisy
parents:
diff changeset
201 * Get parameter pointer and skip leading spaces
b718065f2629 New utility
boisy
parents:
diff changeset
202 ldx <parmptr get our parameter pointer
b718065f2629 New utility
boisy
parents:
diff changeset
203 lbsr SkipSpcs skip any leading spaces
b718065f2629 New utility
boisy
parents:
diff changeset
204 * First parameter should be a hex pad size (maximum 4 hex bytes)
b718065f2629 New utility
boisy
parents:
diff changeset
205 lbsr Hex2Int get hex value
b718065f2629 New utility
boisy
parents:
diff changeset
206 dec <filecnt decrement file count
b718065f2629 New utility
boisy
parents:
diff changeset
207 lbeq ShowHelp if no other file, exit with error
b718065f2629 New utility
boisy
parents:
diff changeset
208 DoLoop lbsr SkipSpcs skip any leading spaces
b718065f2629 New utility
boisy
parents:
diff changeset
209 cmpa #C$CR end of parameters?
b718065f2629 New utility
boisy
parents:
diff changeset
210 beq ExitOk if so, end the utility
b718065f2629 New utility
boisy
parents:
diff changeset
211 pshs x save pointer to arg
b718065f2629 New utility
boisy
parents:
diff changeset
212 bsr ProcFile process file at X
b718065f2629 New utility
boisy
parents:
diff changeset
213 puls x get arg pointer
b718065f2629 New utility
boisy
parents:
diff changeset
214 lbsr SkipNSpc skip the argument we just processed
b718065f2629 New utility
boisy
parents:
diff changeset
215 bra DoLoop
b718065f2629 New utility
boisy
parents:
diff changeset
216
b718065f2629 New utility
boisy
parents:
diff changeset
217 * This routine processes one file at a time.
b718065f2629 New utility
boisy
parents:
diff changeset
218 * Entry: X = ptr to argument on the command line.
b718065f2629 New utility
boisy
parents:
diff changeset
219 * On exit, X can point to the argument or past it.
b718065f2629 New utility
boisy
parents:
diff changeset
220 * Note that there are NO leading spaces.
b718065f2629 New utility
boisy
parents:
diff changeset
221 * They have been skipped by the caller.
b718065f2629 New utility
boisy
parents:
diff changeset
222 * The following code just echos the command line argument, followed
b718065f2629 New utility
boisy
parents:
diff changeset
223 * by a carriage return.
b718065f2629 New utility
boisy
parents:
diff changeset
224 ProcFile
b718065f2629 New utility
boisy
parents:
diff changeset
225 lda <openmode get open mode
b718065f2629 New utility
boisy
parents:
diff changeset
226 ldy #256
b718065f2629 New utility
boisy
parents:
diff changeset
227 os9 I$Write
b718065f2629 New utility
boisy
parents:
diff changeset
228 os9 I$Open open file
b718065f2629 New utility
boisy
parents:
diff changeset
229 bcs Exit exit if error
b718065f2629 New utility
boisy
parents:
diff changeset
230 sta <openpath save path
b718065f2629 New utility
boisy
parents:
diff changeset
231 ldb #SS.Size we want the file size
b718065f2629 New utility
boisy
parents:
diff changeset
232 pshs u,x save
b718065f2629 New utility
boisy
parents:
diff changeset
233 os9 I$GetStt get the size
b718065f2629 New utility
boisy
parents:
diff changeset
234 stu <filesize save file size
b718065f2629 New utility
boisy
parents:
diff changeset
235 bcs Exit branch if error
b718065f2629 New utility
boisy
parents:
diff changeset
236 cmpx #$0000 file bigger than 65535?
b718065f2629 New utility
boisy
parents:
diff changeset
237 bne toobig yup
b718065f2629 New utility
boisy
parents:
diff changeset
238 lda <openpath get path to file
b718065f2629 New utility
boisy
parents:
diff changeset
239 os9 I$Seek seek to the end of the file
b718065f2629 New utility
boisy
parents:
diff changeset
240 bcs Exit branch if error
b718065f2629 New utility
boisy
parents:
diff changeset
241 puls x,u restore
b718065f2629 New utility
boisy
parents:
diff changeset
242 * Expand the file out to the desired size
b718065f2629 New utility
boisy
parents:
diff changeset
243 ldd <hexvalue get pad size
b718065f2629 New utility
boisy
parents:
diff changeset
244 subd <filesize get remaining size left
b718065f2629 New utility
boisy
parents:
diff changeset
245 bcs padbad
b718065f2629 New utility
boisy
parents:
diff changeset
246 * D now holds the number of bytes we need to write
b718065f2629 New utility
boisy
parents:
diff changeset
247 pshs d save count on stack
b718065f2629 New utility
boisy
parents:
diff changeset
248 lda <openpath get path to file
b718065f2629 New utility
boisy
parents:
diff changeset
249 leax padpage,u point to pad page
b718065f2629 New utility
boisy
parents:
diff changeset
250 tst ,s greater than 256 bytes left?
b718065f2629 New utility
boisy
parents:
diff changeset
251 beq cont2 no, write remaining
b718065f2629 New utility
boisy
parents:
diff changeset
252 ldy #256 for 256 bytes
b718065f2629 New utility
boisy
parents:
diff changeset
253 cont os9 I$Write write it out
b718065f2629 New utility
boisy
parents:
diff changeset
254 bcs Exit branch if error
b718065f2629 New utility
boisy
parents:
diff changeset
255 dec ,s decrement page count
b718065f2629 New utility
boisy
parents:
diff changeset
256 bne cont
b718065f2629 New utility
boisy
parents:
diff changeset
257 cont2 puls y get count off stack into Y
b718065f2629 New utility
boisy
parents:
diff changeset
258 os9 I$Write write out remaining bytes
b718065f2629 New utility
boisy
parents:
diff changeset
259 bcs Exit branch if error
b718065f2629 New utility
boisy
parents:
diff changeset
260
b718065f2629 New utility
boisy
parents:
diff changeset
261 * Now close the file and return
b718065f2629 New utility
boisy
parents:
diff changeset
262 os9 I$Close close it
b718065f2629 New utility
boisy
parents:
diff changeset
263 rts
b718065f2629 New utility
boisy
parents:
diff changeset
264
b718065f2629 New utility
boisy
parents:
diff changeset
265 toobig lda #$02 stdout
b718065f2629 New utility
boisy
parents:
diff changeset
266 ldy #BadSizeL get length of bad size message
b718065f2629 New utility
boisy
parents:
diff changeset
267 leax BadSize,pcr and point to it
b718065f2629 New utility
boisy
parents:
diff changeset
268 os9 I$WritLn send out the message
b718065f2629 New utility
boisy
parents:
diff changeset
269 bra error1
b718065f2629 New utility
boisy
parents:
diff changeset
270
b718065f2629 New utility
boisy
parents:
diff changeset
271 padbad lda #$02
b718065f2629 New utility
boisy
parents:
diff changeset
272 ldy #BadPadL
b718065f2629 New utility
boisy
parents:
diff changeset
273 leax BadPad,pcr
b718065f2629 New utility
boisy
parents:
diff changeset
274 os9 I$WritLn
b718065f2629 New utility
boisy
parents:
diff changeset
275 error1 ldb #$01
b718065f2629 New utility
boisy
parents:
diff changeset
276 bra Exit
b718065f2629 New utility
boisy
parents:
diff changeset
277
b718065f2629 New utility
boisy
parents:
diff changeset
278 ShowHelp equ *
b718065f2629 New utility
boisy
parents:
diff changeset
279 IFNE DOHELP
b718065f2629 New utility
boisy
parents:
diff changeset
280 leax >HlpMsg,pcr point to help message
b718065f2629 New utility
boisy
parents:
diff changeset
281 ldy #HlpMsgL get length
b718065f2629 New utility
boisy
parents:
diff changeset
282 lda #$02 std error
b718065f2629 New utility
boisy
parents:
diff changeset
283 os9 I$WritLn write it
b718065f2629 New utility
boisy
parents:
diff changeset
284 ENDC
b718065f2629 New utility
boisy
parents:
diff changeset
285 ExitOk clrb clear carry
b718065f2629 New utility
boisy
parents:
diff changeset
286 Exit os9 F$Exit and exit
b718065f2629 New utility
boisy
parents:
diff changeset
287
b718065f2629 New utility
boisy
parents:
diff changeset
288
b718065f2629 New utility
boisy
parents:
diff changeset
289 * This routine skip over spaces and nul bytes
b718065f2629 New utility
boisy
parents:
diff changeset
290 *
b718065f2629 New utility
boisy
parents:
diff changeset
291 * Entry:
b718065f2629 New utility
boisy
parents:
diff changeset
292 * X = ptr to data to parse
b718065f2629 New utility
boisy
parents:
diff changeset
293 * Exit:
b718065f2629 New utility
boisy
parents:
diff changeset
294 * X = ptr to first non-whitespace char
b718065f2629 New utility
boisy
parents:
diff changeset
295 * A = non-whitespace char
b718065f2629 New utility
boisy
parents:
diff changeset
296 SkipSpcs lda ,x+
b718065f2629 New utility
boisy
parents:
diff changeset
297 beq SkipSpcs
b718065f2629 New utility
boisy
parents:
diff changeset
298 cmpa #C$SPAC
b718065f2629 New utility
boisy
parents:
diff changeset
299 beq SkipSpcs
b718065f2629 New utility
boisy
parents:
diff changeset
300 leax -1,x
b718065f2629 New utility
boisy
parents:
diff changeset
301 rts
b718065f2629 New utility
boisy
parents:
diff changeset
302
b718065f2629 New utility
boisy
parents:
diff changeset
303 * This routine skips over everything but spaces, nul bytes and CRs
b718065f2629 New utility
boisy
parents:
diff changeset
304 *
b718065f2629 New utility
boisy
parents:
diff changeset
305 * Entry:
b718065f2629 New utility
boisy
parents:
diff changeset
306 * X = ptr to data to parse
b718065f2629 New utility
boisy
parents:
diff changeset
307 * Exit:
b718065f2629 New utility
boisy
parents:
diff changeset
308 * X = ptr to first whitespace char
b718065f2629 New utility
boisy
parents:
diff changeset
309 * A = whitespace char
b718065f2629 New utility
boisy
parents:
diff changeset
310 SkipNSpc lda ,x+
b718065f2629 New utility
boisy
parents:
diff changeset
311 beq EatOut
b718065f2629 New utility
boisy
parents:
diff changeset
312 cmpa #C$SPAC
b718065f2629 New utility
boisy
parents:
diff changeset
313 beq EatOut
b718065f2629 New utility
boisy
parents:
diff changeset
314 cmpa #C$CR
b718065f2629 New utility
boisy
parents:
diff changeset
315 bne SkipNSpc
b718065f2629 New utility
boisy
parents:
diff changeset
316 EatOut leax -1,x
b718065f2629 New utility
boisy
parents:
diff changeset
317 rts
b718065f2629 New utility
boisy
parents:
diff changeset
318
b718065f2629 New utility
boisy
parents:
diff changeset
319
b718065f2629 New utility
boisy
parents:
diff changeset
320 * Hex2Int
b718065f2629 New utility
boisy
parents:
diff changeset
321 *
b718065f2629 New utility
boisy
parents:
diff changeset
322 * Entry:
b718065f2629 New utility
boisy
parents:
diff changeset
323 * X = address of hex string (1-4 bytes)
b718065f2629 New utility
boisy
parents:
diff changeset
324 * Exit:
b718065f2629 New utility
boisy
parents:
diff changeset
325 * <hexvalue = value of hex string
b718065f2629 New utility
boisy
parents:
diff changeset
326 * X = address of character after hex string
b718065f2629 New utility
boisy
parents:
diff changeset
327 Hex2Int clr <hexcnt clear our counter
b718065f2629 New utility
boisy
parents:
diff changeset
328 lda ,x
b718065f2629 New utility
boisy
parents:
diff changeset
329 cmpa #'$ hex sign?
b718065f2629 New utility
boisy
parents:
diff changeset
330 bne Hex2Int2
b718065f2629 New utility
boisy
parents:
diff changeset
331 clr ,x+ clear it and move to next char
b718065f2629 New utility
boisy
parents:
diff changeset
332 Hex2Int2 bsr Hex2Nib get hex nibble at ,X
b718065f2629 New utility
boisy
parents:
diff changeset
333 bcs HexW2 branch if done
b718065f2629 New utility
boisy
parents:
diff changeset
334 pshs b save good hex byte on stack
b718065f2629 New utility
boisy
parents:
diff changeset
335 inc <hexcnt increment counter
b718065f2629 New utility
boisy
parents:
diff changeset
336 lda <hexcnt get counter
b718065f2629 New utility
boisy
parents:
diff changeset
337 cmpa #$04 max size?
b718065f2629 New utility
boisy
parents:
diff changeset
338 beq HexW3
b718065f2629 New utility
boisy
parents:
diff changeset
339 bra Hex2Int2 and continue
b718065f2629 New utility
boisy
parents:
diff changeset
340
b718065f2629 New utility
boisy
parents:
diff changeset
341 * Here, <hexcnt contains a count of the bytes on the stack that contain
b718065f2629 New utility
boisy
parents:
diff changeset
342 * hex values
b718065f2629 New utility
boisy
parents:
diff changeset
343 HexW2 tst <hexcnt any valid hex data?
b718065f2629 New utility
boisy
parents:
diff changeset
344 beq HexWDone no, exit
b718065f2629 New utility
boisy
parents:
diff changeset
345
b718065f2629 New utility
boisy
parents:
diff changeset
346 HexW3 clra clear out return hex value
b718065f2629 New utility
boisy
parents:
diff changeset
347 clrb
b718065f2629 New utility
boisy
parents:
diff changeset
348 std <hexvalue
b718065f2629 New utility
boisy
parents:
diff changeset
349
b718065f2629 New utility
boisy
parents:
diff changeset
350 puls b get nibble off the stack
b718065f2629 New utility
boisy
parents:
diff changeset
351 stb <hexvalue+1
b718065f2629 New utility
boisy
parents:
diff changeset
352 dec <hexcnt decrement counter
b718065f2629 New utility
boisy
parents:
diff changeset
353 beq HexWDone branch if done
b718065f2629 New utility
boisy
parents:
diff changeset
354 lsl ,s else move lo-nib on stack to hi-nib
b718065f2629 New utility
boisy
parents:
diff changeset
355 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
356 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
357 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
358 addb ,s+ and add it to lonibble in B
b718065f2629 New utility
boisy
parents:
diff changeset
359 stb <hexvalue+1
b718065f2629 New utility
boisy
parents:
diff changeset
360 dec <hexcnt decrement counter
b718065f2629 New utility
boisy
parents:
diff changeset
361 beq HexWDone
b718065f2629 New utility
boisy
parents:
diff changeset
362 puls b get nibble off the stack
b718065f2629 New utility
boisy
parents:
diff changeset
363 stb <hexvalue+0
b718065f2629 New utility
boisy
parents:
diff changeset
364 dec <hexcnt decrement counter
b718065f2629 New utility
boisy
parents:
diff changeset
365 beq HexWDone
b718065f2629 New utility
boisy
parents:
diff changeset
366 lsl ,s else move lo-nib on stack to hi-nib
b718065f2629 New utility
boisy
parents:
diff changeset
367 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
368 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
369 lsl ,s
b718065f2629 New utility
boisy
parents:
diff changeset
370 addb ,s+ and add it to lonibble in A
b718065f2629 New utility
boisy
parents:
diff changeset
371 stb <hexvalue+0
b718065f2629 New utility
boisy
parents:
diff changeset
372
b718065f2629 New utility
boisy
parents:
diff changeset
373 HexWDone rts
b718065f2629 New utility
boisy
parents:
diff changeset
374
b718065f2629 New utility
boisy
parents:
diff changeset
375
b718065f2629 New utility
boisy
parents:
diff changeset
376
b718065f2629 New utility
boisy
parents:
diff changeset
377 * Hex2Nib - Convert byte at X from hex to byte integer
b718065f2629 New utility
boisy
parents:
diff changeset
378 *
b718065f2629 New utility
boisy
parents:
diff changeset
379 * Entry:
b718065f2629 New utility
boisy
parents:
diff changeset
380 * X = address of byte to convert
b718065f2629 New utility
boisy
parents:
diff changeset
381 * Exit:
b718065f2629 New utility
boisy
parents:
diff changeset
382 * A = ASCII value of char at X
b718065f2629 New utility
boisy
parents:
diff changeset
383 * B = byte value of hex char at X (if carry clear)
b718065f2629 New utility
boisy
parents:
diff changeset
384 * OR error (if carry set)
b718065f2629 New utility
boisy
parents:
diff changeset
385 Hex2Nib lda ,x get char at X
b718065f2629 New utility
boisy
parents:
diff changeset
386 tfr a,b transfer it to working reg (B)
b718065f2629 New utility
boisy
parents:
diff changeset
387 subb #$30 subtract '0
b718065f2629 New utility
boisy
parents:
diff changeset
388 cmpb #$09 compare against 9
b718065f2629 New utility
boisy
parents:
diff changeset
389 bls L02B1 branch if valid number
b718065f2629 New utility
boisy
parents:
diff changeset
390 cmpb #$31 uppercase?
b718065f2629 New utility
boisy
parents:
diff changeset
391 bcs L02A7 branch if so
b718065f2629 New utility
boisy
parents:
diff changeset
392 subb #$20 else make uppercase
b718065f2629 New utility
boisy
parents:
diff changeset
393 L02A7 subb #$07 subtract
b718065f2629 New utility
boisy
parents:
diff changeset
394 cmpb #$0F compare against 0x0F
b718065f2629 New utility
boisy
parents:
diff changeset
395 bhi L02B6 branch if higher
b718065f2629 New utility
boisy
parents:
diff changeset
396 cmpb #$0A compare against 0x0A
b718065f2629 New utility
boisy
parents:
diff changeset
397 bcs L02B6
b718065f2629 New utility
boisy
parents:
diff changeset
398 L02B1 andcc #^Carry clear carry
b718065f2629 New utility
boisy
parents:
diff changeset
399 clr ,x clear byte on cmd line
b718065f2629 New utility
boisy
parents:
diff changeset
400 leax $01,x move X to next char
b718065f2629 New utility
boisy
parents:
diff changeset
401 rts return
b718065f2629 New utility
boisy
parents:
diff changeset
402 L02B6 comb
b718065f2629 New utility
boisy
parents:
diff changeset
403 rts
b718065f2629 New utility
boisy
parents:
diff changeset
404
b718065f2629 New utility
boisy
parents:
diff changeset
405 emod
b718065f2629 New utility
boisy
parents:
diff changeset
406 eom equ *
b718065f2629 New utility
boisy
parents:
diff changeset
407 end