diff --git a/bin/FSHa.8xp b/bin/FSHa.8xp index 814de8f..91439f1 100644 Binary files a/bin/FSHa.8xp and b/bin/FSHa.8xp differ diff --git a/includes/FshCmd.asm b/includes/FshCmd.asm index 0593301..670ccfb 100644 --- a/includes/FshCmd.asm +++ b/includes/FshCmd.asm @@ -24,6 +24,15 @@ fshcmddecode: call z, bytecpy pop hl + push hl + push de + ld de, fshcmdCOPY + call strcmp + ld hl, fshcmdCOPYo + pop de + call z, bytecpy + pop hl + push hl push de ld de, fshcmdVARS @@ -59,7 +68,11 @@ fshcmdroute: ld de, fshcmdSETo call bytecmp jp z, fshcmdSETf - + + ld de, fshcmdCOPYo + call bytecmp + jp z, fshcmdCOPYf + ld de, fshcmdVARSo call bytecmp jp z, fshcmdVARSf diff --git a/includes/FshVar.asm b/includes/FshVar.asm index c6b2941..e015756 100644 --- a/includes/FshVar.asm +++ b/includes/FshVar.asm @@ -77,29 +77,32 @@ fshvarcpy: ld bc, FshVarsSize / 2 - 1 call cpBCDE pop bc - jr c, fshvarcpyOOBException - - push bc - push de - push hl - ld bc, FshVarsSize / 2 - call cpBCDE jr c, fshvarcpyOOBException - ld bc, FshVars - add hl, hl - add hl, bc - ex de, hl - add hl, hl - add hl, bc - ld a, (de) - ld (hl), a + push bc + ld bc, FshVarsSize / 2 + call cpHLBC + pop bc + jr nc, fshvarcpyOOBException + + push de + push hl + ld bc, FshVarsSize / 2 + call cpBCDE + jr c, fshvarcpyOOBException + ld bc, FshVars + add hl, hl + add hl, bc + ex de, hl + add hl, hl + add hl, bc + ld a, (de) + ld (hl), a inc de inc hl - ld a, (de) - ld (hl), a - pop hl + ld a, (de) + ld (hl), a + pop hl pop de - pop bc ret fshvarcpyOOBException: diff --git a/includes/commands.inc b/includes/commands.inc index 93aae0a..6687b9e 100644 --- a/includes/commands.inc +++ b/includes/commands.inc @@ -1,4 +1,5 @@ #include "includes/commands/EXIT.asm" #include "includes/commands/SET.asm" +#include "includes/commands/COPY.asm" #include "includes/commands/CLS.asm" #include "includes/commands/VARS.asm" diff --git a/includes/commands/COPY.asm b/includes/commands/COPY.asm new file mode 100644 index 0000000..a0edeca --- /dev/null +++ b/includes/commands/COPY.asm @@ -0,0 +1,68 @@ +fshcmdCOPY: .db "COPY", 0 +fshcmdCOPYo: .db $02 +fshcmdCOPYu: .db "Copys a value in FSH memory to another addess", 0 +fshcmdCOPYf: +fshcmdCOPYfArg0: + ld hl, FshCmdArg0 + ld de, 0 + ld e, (hl) + inc hl + ld d, (hl) + ex de, hl + ld de, 0 + call cpHLDE + jr nz, fshcmdCOPYfArg1 +fshcmdCOPYfArg0Get: + ld a, 'G' + call _PutC + xor a + ld (CurCol), a + ld hl, fshcmdCOPYfDSource + call _PutS + ld hl, fshcmdCOPYfInputBuffer + ld de, 3 + call inputnumstr + call strtob + ld hl, FshCmdArg0 + ld (hl), a + call _NewLine +fshcmdCOPYfArg1: + ld hl, FshCmdArg1 + ld de, 0 + ld e, (hl) + inc hl + ld d, (hl) + ex de, hl + ld de, 0 + call cpHLDE + jr nz, fshcmdCOPYfExe +fshcmdCOPYfArg1Get: + xor a + ld (CurCol), a + ld hl, fshcmdCOPYfDDestination + call _PutS + ld hl, fshcmdCOPYfInputBuffer + ld de, 3 + call inputnumstr + call strtob + ex de, hl + ld hl, FshCmdArg1 + ld (hl), a +fshcmdCOPYfExe: + ld hl, FshCmdArg0 + ld de, 0 + ld e, (hl) + ex de, hl + push hl + ld hl, FshCmdArg1 + ld de, 0 + ld e, (hl) + pop hl + ;ld de, $77 + call fshvarcpy + call _NewLine + jp ErrCatch + +fshcmdCOPYfInputBuffer: .db $00, $00, $00, $00, $00, $00 +fshcmdCOPYfDSource: .db "Source= ", 0 +fshcmdCOPYfDDestination: .db "Destination= ", 0 diff --git a/includes/commands/SET.asm b/includes/commands/SET.asm index 0c63833..47cbd84 100644 --- a/includes/commands/SET.asm +++ b/includes/commands/SET.asm @@ -66,5 +66,5 @@ fshcmdSETfExe: jp ErrCatch fshcmdSETfInputBuffer: .db $00, $00, $00, $00, $00, $00 -fshcmdSETfDIndex: .db "Index= ", 0 +fshcmdSETfDIndex: .db "Destination= ", 0 fshcmdSETfDValue: .db "Value= ", 0