Add multiple argument support and make list ignore non-existent lines
This commit is contained in:
parent
d78deb4616
commit
1c2c501d09
133
gidubba.asm
133
gidubba.asm
|
@ -34,11 +34,7 @@ cmdp: load r0, prompt
|
|||
store arg2, r0
|
||||
store arg2 + 1, r0
|
||||
|
||||
;Temporary
|
||||
load r0, const1
|
||||
store count, r0
|
||||
|
||||
;Parse the command and its argument if any
|
||||
;Parse the command and its first argument
|
||||
;Command
|
||||
load r0, buffer
|
||||
store cmd, r0
|
||||
|
@ -53,24 +49,48 @@ cmdp: load r0, prompt
|
|||
load r3, const1
|
||||
store argf1, r3
|
||||
breq r0, r2, hsharg
|
||||
load r3, arg1d2 + 1
|
||||
store arg2d1 + 1, r3
|
||||
load r3, arg1d2 + 2
|
||||
store arg2d1 + 2, r3
|
||||
load r3, comma
|
||||
breq r0, r3, 2ndarg
|
||||
store arg1 + 3, r0
|
||||
;Second digit
|
||||
load r0, buffer + 2
|
||||
arg1d2: load r0, buffer + 2
|
||||
breq r0, r1, getarg
|
||||
load r3, arg1d3 + 1
|
||||
store arg2d1 + 1, r3
|
||||
load r3, arg1d3 + 2
|
||||
store arg2d1 + 2, r3
|
||||
load r3, comma
|
||||
breq r0, r3, 2ndarg
|
||||
load r2, arg1 + 3
|
||||
store arg1 + 2, r2
|
||||
store arg1 + 3, r0
|
||||
;Third digit
|
||||
load r0, buffer + 3
|
||||
arg1d3: load r0, buffer + 3
|
||||
breq r0, r1, getarg
|
||||
load r3, arg1d4 + 1
|
||||
store arg2d1 + 1, r3
|
||||
load r3, arg1d4 + 2
|
||||
store arg2d1 + 2, r3
|
||||
load r3, comma
|
||||
breq r0, r3, 2ndarg
|
||||
load r2, arg1 + 2
|
||||
store arg1 + 1, r2
|
||||
load r2, arg1 + 3
|
||||
store arg1 + 2, r2
|
||||
store arg1 + 3, r0
|
||||
;Fourth digit
|
||||
load r0, buffer + 4
|
||||
arg1d4: load r0, buffer + 4
|
||||
breq r0, r1, getarg
|
||||
load r3, arg1d5 + 1
|
||||
store arg2d1 + 1, r3
|
||||
load r3, arg1d5 + 2
|
||||
store arg2d1 + 2, r3
|
||||
load r3, comma
|
||||
breq r0, r3, 2ndarg
|
||||
load r2, arg1 + 1
|
||||
store arg1, r2
|
||||
load r2, arg1 + 2
|
||||
|
@ -79,7 +99,44 @@ cmdp: load r0, prompt
|
|||
store arg1 + 2, r2
|
||||
store arg1 + 3, r0
|
||||
;Check for command end
|
||||
load r0, buffer + 5
|
||||
load r0, arg1d5 + 1
|
||||
load r1, arg1d5 + 2
|
||||
cleq r0, r0, incdw
|
||||
store arg2d1 + 1, r0
|
||||
store arg2d1 + 2, r1
|
||||
load r1, cr
|
||||
arg1d5: load r0, buffer + 5
|
||||
breq r0, r1, getarg
|
||||
load r3, comma
|
||||
breq r0, r3, 2ndarg
|
||||
breq r0, r0, cmderr
|
||||
|
||||
;Parse the second argument
|
||||
;Set the addresses
|
||||
2ndarg: load r0, arg2d1 + 1
|
||||
load r1, arg2d1 + 2
|
||||
cleq r0, r0, incdw
|
||||
store arg2d2 + 1, r0
|
||||
store arg2d2 + 2, r1
|
||||
cleq r0, r0, incdw
|
||||
store arg2d3 + 1, r0
|
||||
store arg2d3 + 2, r1
|
||||
;Load carriage return
|
||||
load r1, cr
|
||||
;First digit
|
||||
arg2d1: load r0, 0
|
||||
breq r0, r1, chkcmd
|
||||
load r3, const1
|
||||
store argf2, r3
|
||||
store arg2 + 1, r0
|
||||
;Second digit
|
||||
arg2d2: load r0, 0
|
||||
breq r0, r1, getarg
|
||||
load r2, arg2 + 1
|
||||
store arg2, r2
|
||||
store arg2 + 1, r0
|
||||
;Check for command end
|
||||
arg2d3: load r0, 0
|
||||
breq r0, r1, getarg
|
||||
breq r0, r0, cmderr
|
||||
|
||||
|
@ -134,6 +191,27 @@ getarg: load r0, arg1
|
|||
or r0, r2
|
||||
store line + 1, r0
|
||||
|
||||
;Get the value of the second argument
|
||||
;First digit
|
||||
load r0, arg2
|
||||
cleq r0, r0, hex2n
|
||||
load r1, qmark
|
||||
breq r0, r1, cmderr
|
||||
xor r2, r2
|
||||
xor r2, r0
|
||||
shl r2
|
||||
shl r2
|
||||
shl r2
|
||||
shl r2
|
||||
;Second digit
|
||||
load r0, arg2 + 1
|
||||
cleq r0, r0, hex2n
|
||||
load r1, qmark
|
||||
breq r0, r1, cmderr
|
||||
;Combine and store the first and second digits
|
||||
or r0, r2
|
||||
store count, r0
|
||||
|
||||
;Check for commands
|
||||
;Load the command
|
||||
chkcmd: load r0, cmd
|
||||
|
@ -141,11 +219,10 @@ chkcmd: load r0, cmd
|
|||
load r2, argf1
|
||||
xor r3, r3
|
||||
breq r2, r3, cnarg
|
||||
;Insert
|
||||
load r1, uci
|
||||
breq r0, r1, insln
|
||||
load r1, lci
|
||||
breq r0, r1, insln
|
||||
;Check for single argument
|
||||
load r2, argf2
|
||||
xor r3, r3
|
||||
breq r2, r3, onearg
|
||||
;Delete
|
||||
load r1, ucd
|
||||
breq r0, r1, delete
|
||||
|
@ -158,6 +235,13 @@ chkcmd: load r0, cmd
|
|||
breq r0, r1, list
|
||||
;Branch to error
|
||||
breq r0, r0, cmderr
|
||||
;Insert
|
||||
onearg: load r1, uci
|
||||
breq r0, r1, insln
|
||||
load r1, lci
|
||||
breq r0, r1, insln
|
||||
;Branch to error
|
||||
breq r0, r0, cmderr
|
||||
;Print
|
||||
cnarg: load r1, ucp
|
||||
breq r0, r1, print
|
||||
|
@ -368,16 +452,16 @@ delete: xor r0, r0
|
|||
;High byte
|
||||
load r0, sublod + 1
|
||||
store stomov + 1, r0
|
||||
store chsend + 1, r0
|
||||
store dchend + 1, r0
|
||||
;Low byte
|
||||
load r0, sublod + 2
|
||||
store stomov + 2, r0
|
||||
store chsend + 2, r0
|
||||
store dchend + 2, r0
|
||||
|
||||
;Check for the save end
|
||||
chsend: load r0, 0
|
||||
dchend: load r0, 0
|
||||
load r1, sub
|
||||
breq r0, r1, delend
|
||||
breq r0, r1, cmdp
|
||||
|
||||
;Increment the line number
|
||||
;Load the number
|
||||
|
@ -458,16 +542,23 @@ list: xor r0, r0
|
|||
;Find the argument line in the save and store its number
|
||||
cleq r0, r0, fend
|
||||
|
||||
;Print a line number prompt
|
||||
cleq r0, r0, prnln
|
||||
|
||||
;Get the save address of the line
|
||||
;High byte
|
||||
load r0, sublod + 1
|
||||
store chlist + 1, r0
|
||||
store lchend + 1, r0
|
||||
;Low byte
|
||||
load r0, sublod + 2
|
||||
store chlist + 2, r0
|
||||
store lchend + 2, r0
|
||||
|
||||
;Check for the save end
|
||||
lchend: load r0, 0
|
||||
load r1, sub
|
||||
breq r0, r1, cmdp
|
||||
|
||||
;Print a line number prompt
|
||||
cleq r0, r0, prnln
|
||||
|
||||
;Load a character from the save
|
||||
chlist: load r1, 0
|
||||
|
|
15
readme.md
15
readme.md
|
@ -17,14 +17,17 @@ differs from this you may have to modify the code yourself.
|
|||
Usage
|
||||
-----
|
||||
|
||||
The commands are individual letters that depending on the command can be
|
||||
followed by an argument. The argument can be either a hexadecimal line
|
||||
number between 0 and FFFF or a hash (#), a shortcut for line FFFF. An
|
||||
argument to a non-existent line will be interpreted as referring to the
|
||||
line number after the last line.
|
||||
The commands are individual letters that can be followed by one or two
|
||||
arguments separated by a comma. The first argument is a target line
|
||||
number between 0 and FFFF and the second the range of lines between 0
|
||||
and FF the command affects. Inserting lines to a target that does not
|
||||
exist or the shortcut hash (#) appends them to the text; otherwise
|
||||
targets or parts of ranges that do not exist are ignored.
|
||||
|
||||
Commands with an argument:
|
||||
Commands with a single argument:
|
||||
* I: Insert a line or lines
|
||||
|
||||
Commands with two arguments:
|
||||
* D: Delete a line
|
||||
* L: List a line
|
||||
|
||||
|
|
Loading…
Reference in New Issue