From d78deb46161815be6bee80239220069fba5d7b91 Mon Sep 17 00:00:00 2001 From: CrazyEttin <> Date: Sat, 13 Aug 2022 17:23:25 +0300 Subject: [PATCH] Implement the infrastructure for multiple arguments and improve argument checking --- gidubba.asm | 153 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 103 insertions(+), 50 deletions(-) diff --git a/gidubba.asm b/gidubba.asm index 88b1622..eb0c6f7 100644 --- a/gidubba.asm +++ b/gidubba.asm @@ -24,14 +24,19 @@ cmdp: load r0, prompt ;Initialise the command and argument xor r0, r0 store cmd, r0 + store argf1, r0 + store argf2, r0 load r0, zero - store arg, r0 - store arg + 1, r0 - store arg + 2, r0 - store arg + 3, r0 - load r0, qmark - store argval, r0 - store argval + 1, r0 + store arg1, r0 + store arg1 + 1, r0 + store arg1 + 2, r0 + store arg1 + 3, r0 + store arg2, r0 + store arg2 + 1, r0 + + ;Temporary + load r0, const1 + store count, r0 ;Parse the command and its argument if any ;Command @@ -45,32 +50,34 @@ cmdp: load r0, prompt ;First digit load r0, buffer + 1 breq r0, r1, chkcmd + load r3, const1 + store argf1, r3 breq r0, r2, hsharg - store arg + 3, r0 + store arg1 + 3, r0 ;Second digit load r0, buffer + 2 breq r0, r1, getarg - load r2, arg + 3 - store arg + 2, r2 - store arg + 3, r0 + load r2, arg1 + 3 + store arg1 + 2, r2 + store arg1 + 3, r0 ;Third digit load r0, buffer + 3 breq r0, r1, getarg - load r2, arg + 2 - store arg + 1, r2 - load r2, arg + 3 - store arg + 2, r2 - store arg + 3, r0 + 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 breq r0, r1, getarg - load r2, arg + 1 - store arg, r2 - load r2, arg + 2 - store arg + 1, r2 - load r2, arg + 3 - store arg + 2, r2 - store arg + 3, r0 + load r2, arg1 + 1 + store arg1, r2 + load r2, arg1 + 2 + store arg1 + 1, r2 + load r2, arg1 + 3 + store arg1 + 2, r2 + store arg1 + 3, r0 ;Check for command end load r0, buffer + 5 breq r0, r1, getarg @@ -83,13 +90,13 @@ hsharg: load r0, buffer + 2 ;Save FFFF xor r0, r0 nand r0, r0 - store argval, r0 - store argval + 1, r0 + store line, r0 + store line + 1, r0 breq r0, r0, chkcmd - ;Get the value of the argument + ;Get the value of the first argument ;First digit -getarg: load r0, arg +getarg: load r0, arg1 cleq r0, r0, hex2n load r1, qmark breq r0, r1, cmderr @@ -100,15 +107,15 @@ getarg: load r0, arg shl r2 shl r2 ;Second digit - load r0, arg + 1 + load r0, arg1 + 1 cleq r0, r0, hex2n load r1, qmark breq r0, r1, cmderr ;Combine and store the first and second digits or r0, r2 - store argval, r0 + store line, r0 ;Third digit - load r0, arg + 2 + load r0, arg1 + 2 cleq r0, r0, hex2n load r1, qmark breq r0, r1, cmderr @@ -119,20 +126,20 @@ getarg: load r0, arg shl r2 shl r2 ;Fourth digit - load r0, arg + 3 + load r0, arg1 + 3 cleq r0, r0, hex2n load r1, qmark breq r0, r1, cmderr ;Combine and store the third and fourth digits or r0, r2 - store argval + 1, r0 + store line + 1, r0 ;Check for commands ;Load the command chkcmd: load r0, cmd ;Check for no argument - load r2, argval - load r3, qmark + load r2, argf1 + xor r3, r3 breq r2, r3, cnarg ;Insert load r1, uci @@ -194,8 +201,8 @@ instrt: cleq r0, r0, prnln ;Increment cleq r0, r0, incdw ;Store the number - store argval, r0 - store argval + 1, r1 + store line, r0 + store line + 1, r1 ;*** @@ -349,8 +356,13 @@ chsave: store buffer + 100, r1 ;Delete a line + ;Check the counter +delete: xor r0, r0 + load r1, count + breq r0, r1, cmdp + ;Find the argument line in the save and store its number -delete: cleq r0, r0, fend + cleq r0, r0, fend ;Get the save address of the line ;High byte @@ -369,13 +381,13 @@ chsend: load r0, 0 ;Increment the line number ;Load the number - load r0, argval - load r1, argval + 1 + load r0, line + load r1, line + 1 ;Increment cleq r0, r0, incdw ;Store the number - store argval, r0 - store argval + 1, r1 + store line, r0 + store line + 1, r1 ;Find the next line in the save and store its number cleq r0, r0, fend @@ -419,15 +431,32 @@ stomov: store 0, r0 ;Move the next character breq r0, r0, lodmov - ;Return to the command prompt -delend: breq r0, r0, cmdp + ;Loop + ;Decrement the counter +delend: load r0, count + load r2, cstff + cleq r0, r0, sum + store count, r0 + ;Decrement the line number + load r0, line + load r1, line + 1 + cleq r0, r0, decdw + store line, r0 + store line + 1, r1 + ;Loop + breq r0, r0, delete ;*** ;List a line + ;Check the counter +list: xor r0, r0 + load r1, count + breq r0, r1, cmdp + ;Find the argument line in the save and store its number -list: cleq r0, r0, fend + cleq r0, r0, fend ;Print a line number prompt cleq r0, r0, prnln @@ -470,8 +499,20 @@ chlist: load r1, 0 ;Print a newline prnwln: cleq r0, r0, newln - ;Return to the command prompt -lstend: breq r0, r0, cmdp + ;Loop + ;Decrement the counter +lstend: load r0, count + load r2, cstff + cleq r0, r0, sum + store count, r0 + ;Increment the line number + load r0, line + load r1, line + 1 + cleq r0, r0, incdw + store line, r0 + store line + 1, r1 + ;Loop + breq r0, r0, list ;*** @@ -1012,10 +1053,10 @@ fend: xor r0, r0 store sublod + 2, r0 ;Check for the argument -charg: load r0, argval +charg: load r0, line load r1, lnnum brneq r0, r1, fsub - load r0, argval + 1 + load r0, line + 1 load r1, lnnum + 1 breq r0, r1, fendnd @@ -1136,6 +1177,7 @@ sub: data 1a esc: data 1b space: data 20 hash: data 23 +comma: data 2c zero: data 30 one: data 31 two: data 32 @@ -1176,16 +1218,27 @@ ovrflw: data 0 lnnum: data 0 data 0 strsz: data 0 +dgtcnt: data 0 +dgtadr: addr buffer + 2 cmd: data 0 -arg: data 30 +arg1: data 30 data 30 data 30 data 30 -argval: data 0 +argf1: data 0 +arg2: data 30 + data 30 +argf2: data 0 +line: data 0 data 0 +count: data 0 cmpadr: data 0 data 0 + + + + ;Buffer and save bfstrt: addr buffer bfsize: data fe