core: remove cpHLDE
It wasn't used much, so I replaced its use in the kernel with direct code and moved the routine in apps/ed, the only other place where it was used.
This commit is contained in:
parent
c002c69208
commit
4f7a05e3b7
@ -33,6 +33,7 @@
|
|||||||
.inc "core.asm"
|
.inc "core.asm"
|
||||||
.inc "lib/util.asm"
|
.inc "lib/util.asm"
|
||||||
.inc "lib/parse.asm"
|
.inc "lib/parse.asm"
|
||||||
|
.inc "ed/util.asm"
|
||||||
.equ IO_RAMSTART USER_RAMSTART
|
.equ IO_RAMSTART USER_RAMSTART
|
||||||
.inc "ed/io.asm"
|
.inc "ed/io.asm"
|
||||||
.equ BUF_RAMSTART IO_RAMEND
|
.equ BUF_RAMSTART IO_RAMEND
|
||||||
|
8
apps/ed/util.asm
Normal file
8
apps/ed/util.asm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
; Compare HL with DE and sets Z and C in the same way as a regular cp X where
|
||||||
|
; HL is A and DE is X.
|
||||||
|
cpHLDE:
|
||||||
|
push hl
|
||||||
|
or a ;reset carry flag
|
||||||
|
sbc hl, de ;There is no 'sub hl, de', so we must use sbc
|
||||||
|
pop hl
|
||||||
|
ret
|
@ -57,15 +57,6 @@ intoIX:
|
|||||||
pop ix
|
pop ix
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; Compare HL with DE and sets Z and C in the same way as a regular cp X where
|
|
||||||
; HL is A and DE is X.
|
|
||||||
cpHLDE:
|
|
||||||
push hl
|
|
||||||
or a ;reset carry flag
|
|
||||||
sbc hl, de ;There is no 'sub hl, de', so we must use sbc
|
|
||||||
pop hl
|
|
||||||
ret
|
|
||||||
|
|
||||||
; Write the contents of HL in (DE)
|
; Write the contents of HL in (DE)
|
||||||
; de and hl are preserved, so no pushing/popping necessary
|
; de and hl are preserved, so no pushing/popping necessary
|
||||||
writeHLinDE:
|
writeHLinDE:
|
||||||
|
@ -413,17 +413,17 @@ fsPlaceH:
|
|||||||
; Sets Z according to whether HL is within bounds for file handle at (IX), that
|
; Sets Z according to whether HL is within bounds for file handle at (IX), that
|
||||||
; is, if it is smaller than file size.
|
; is, if it is smaller than file size.
|
||||||
fsWithinBounds:
|
fsWithinBounds:
|
||||||
push de
|
ld a, h
|
||||||
; file size
|
cp (ix+5)
|
||||||
ld e, (ix+4)
|
jr c, .within ; H < (IX+5)
|
||||||
ld d, (ix+5)
|
jp nz, unsetZ ; H > (IX+5)
|
||||||
call cpHLDE
|
; H == (IX+5)
|
||||||
pop de
|
ld a, l
|
||||||
jr nc, .outOfBounds ; HL >= DE
|
cp (ix+4)
|
||||||
|
jp nc, unsetZ ; L >= (IX+4)
|
||||||
|
.within:
|
||||||
cp a ; ensure Z
|
cp a ; ensure Z
|
||||||
ret
|
ret
|
||||||
.outOfBounds:
|
|
||||||
jp unsetZ ; returns
|
|
||||||
|
|
||||||
; Set size of file handle (IX) to value in HL.
|
; Set size of file handle (IX) to value in HL.
|
||||||
; This writes directly in handle's metadata.
|
; This writes directly in handle's metadata.
|
||||||
|
@ -13,8 +13,10 @@
|
|||||||
_mmapAddr:
|
_mmapAddr:
|
||||||
push de
|
push de
|
||||||
ld de, MMAP_LEN
|
ld de, MMAP_LEN
|
||||||
call cpHLDE
|
or a ; reset carry flag
|
||||||
|
sbc hl, de
|
||||||
jr nc, .outOfBounds ; HL >= DE
|
jr nc, .outOfBounds ; HL >= DE
|
||||||
|
add hl, de ; old HL value
|
||||||
ld de, MMAP_START
|
ld de, MMAP_START
|
||||||
add hl, de
|
add hl, de
|
||||||
cp a ; ensure Z
|
cp a ; ensure Z
|
||||||
|
@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
jp test
|
jp test
|
||||||
|
|
||||||
.inc "core.asm"
|
|
||||||
|
|
||||||
dummyLabel:
|
dummyLabel:
|
||||||
testNum: .db 1
|
testNum: .db 1
|
||||||
|
|
||||||
@ -48,30 +46,11 @@ test:
|
|||||||
; test that "@" is updated by a .org directive
|
; test that "@" is updated by a .org directive
|
||||||
ld hl, AFTER_ORG
|
ld hl, AFTER_ORG
|
||||||
ld de, 0x1234
|
ld de, 0x1234
|
||||||
call cpHLDE
|
or a ; clear carry
|
||||||
|
sbc hl, de
|
||||||
jp nz, fail
|
jp nz, fail
|
||||||
call nexttest
|
call nexttest
|
||||||
|
|
||||||
; *** cpHLDE ***
|
|
||||||
ld hl, 0x42
|
|
||||||
ld de, 0x42
|
|
||||||
call cpHLDE
|
|
||||||
jp nz, fail
|
|
||||||
jp c, fail
|
|
||||||
call nexttest
|
|
||||||
|
|
||||||
ld de, 0x4242
|
|
||||||
call cpHLDE
|
|
||||||
jp z, fail
|
|
||||||
jp nc, fail
|
|
||||||
call nexttest
|
|
||||||
|
|
||||||
ld hl, 0x4243
|
|
||||||
call cpHLDE
|
|
||||||
jp z, fail
|
|
||||||
jp c, fail
|
|
||||||
call nexttest
|
|
||||||
|
|
||||||
; success
|
; success
|
||||||
xor a
|
xor a
|
||||||
halt
|
halt
|
||||||
|
42
tools/tests/unit/test_ed_util.asm
Normal file
42
tools/tests/unit/test_ed_util.asm
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
jp test
|
||||||
|
|
||||||
|
.inc "ed/util.asm"
|
||||||
|
|
||||||
|
test:
|
||||||
|
ld sp, 0xffff
|
||||||
|
|
||||||
|
; *** cpHLDE ***
|
||||||
|
ld hl, 0x42
|
||||||
|
ld de, 0x42
|
||||||
|
call cpHLDE
|
||||||
|
jp nz, fail
|
||||||
|
jp c, fail
|
||||||
|
call nexttest
|
||||||
|
|
||||||
|
ld de, 0x4242
|
||||||
|
call cpHLDE
|
||||||
|
jp z, fail
|
||||||
|
jp nc, fail
|
||||||
|
call nexttest
|
||||||
|
|
||||||
|
ld hl, 0x4243
|
||||||
|
call cpHLDE
|
||||||
|
jp z, fail
|
||||||
|
jp c, fail
|
||||||
|
call nexttest
|
||||||
|
|
||||||
|
; success
|
||||||
|
xor a
|
||||||
|
halt
|
||||||
|
|
||||||
|
testNum: .db 1
|
||||||
|
|
||||||
|
nexttest:
|
||||||
|
ld a, (testNum)
|
||||||
|
inc a
|
||||||
|
ld (testNum), a
|
||||||
|
ret
|
||||||
|
|
||||||
|
fail:
|
||||||
|
ld a, (testNum)
|
||||||
|
halt
|
Loading…
Reference in New Issue
Block a user