1
2
3
4
5 :
6 load%=&8000:DIM mcode% &400
7 PC=15:LINK=14:SP=13
8 FOR P=0 TO 1:opt%=P*3+4
9 P%=load%:O%=mcode%
10 [OPT opt%
11 \ CODE HEADER
12 \ -----------
13 .CODESTART
14 .L0000:B Entry
15 .L0004:EQUW &00
16 .L0006:EQUB &6D
17 .L0007:EQUB &00:\EQUB CopyR-L0000
18 .Title:EQUB &00:EQUS "ARM Command Line Test"
19 EQUB &00:EQUS "0.01 (10 Dec 2017)"
20 .CopyR:EQUB &00:EQUS "(C)J.G.Harston":EQUB 0
21 EQUD load%
22 EQUD CodeEnd-L0000
23 ALIGN
24 .Entry
25 MOV R0,#1:MOV R1,#0:MOV R2,#0
26 SWI "XOS_Args" :\ R2=address of comand line parameters
27 ORRS R2,R2,R2:BMI rdcmdline :\ Command line in I/O processor
28 SWI "OS_GetEnv" :\ Read command line from local memory
29 .rdcmdlinelp1
30 LDRB R1,[R0],#1:CMP R1,#ASC" "
31 BHI rdcmdlinelp1:SUB R0,R0,#1
32 .rdcmdlinelp2
33 LDRB R1,[R0],#1:CMP R1,#ASC" "
34 BEQ rdcmdlinelp2:SUB R0,R0,#1
35 B rdcmdlinedone :\ R0=>command line parameters
36 :
37 .rdcmdline
38 ADR R3,cmdline :\ R3=>local buffer
39 ADR R1,addr :\ Point to control block
40 .rdcmdlp1
41 STR R2,addr :\ Store address in control block
42 MOV R0,#5:SWI "OS_Word" :\ Read byte from I/O memory
43 LDRB R0,[R1,#4] :\ Get byte read
44 STRB R0,[R3],#1 :\ Store in local buffer
45 ADD R2,R2,#1 :\ Increment command line address
46 CMP R0,#13:BNE rdcmdlp1 :\ Loop until <cr>
47 ADR R0,cmdline :\ R0=>command line parameters
48 .rdcmdlinedone
49 :
50 :
51 MOV R1,R0
52 SWI "OS_WriteS":EQUS "CMD=>":EQUB 0:ALIGN
53 .CommandLine
54 LDRB R0,[R1],#1:CMP R0,#ASC" "
55 SWIHS "OS_WriteC":BHS CommandLine
56 SWI 256+ASC"<":SWI "OS_NewLine"
57 SWI "OS_Exit"
58 :
59 .addr
60 EQUD 0:EQUB 0 :\ addr = 5-byte buffer to read I/O memory
61 .cmdline :\ cmdline = 256-byte buffer to copy command line to
62 \EQUS STRING$(128,CHR$0)
63 \EQUS STRING$(128,CHR$0)
64 ALIGN
65 .CodeEnd
66 ]NEXT
67 PRINT "Saving";
68 OSCLI "SAVE CmdLine "+STR$~mcode%+" "+STR$~O%+" "+STR$~load%+" "+STR$~load%
69 PRINT