mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-02 20:20:55 +11:00
Compare commits
2 Commits
7cf3ed38da
...
79e04189b0
Author | SHA1 | Date | |
---|---|---|---|
|
79e04189b0 | ||
|
6e714875dc |
@ -76,6 +76,12 @@ forward-reference labels.
|
|||||||
|
|
||||||
However, they *cannot* forward-reference other constants.
|
However, they *cannot* forward-reference other constants.
|
||||||
|
|
||||||
|
When defining a constant, if the symbol specified has already been defined, no
|
||||||
|
error occur and the first value defined stays intact. This allows for "user
|
||||||
|
override" of programs.
|
||||||
|
|
||||||
|
It's also important to note that constants always override labels, regardless
|
||||||
|
of declaration order.
|
||||||
|
|
||||||
## Expressions
|
## Expressions
|
||||||
|
|
||||||
@ -119,12 +125,8 @@ allowed. An included file cannot have an `.inc` directive.
|
|||||||
|
|
||||||
**.equ**: Binds a symbol named after the first parameter to the value of the
|
**.equ**: Binds a symbol named after the first parameter to the value of the
|
||||||
expression written as the second parameter. Example:
|
expression written as the second parameter. Example:
|
||||||
`.equ foo 0x42+'A'`
|
`.equ foo 0x42+'A'`. See "Constants" above.
|
||||||
|
|
||||||
If the symbol specified has already been defined, no error occur and
|
|
||||||
the first value defined stays intact. This allows for "user override"
|
|
||||||
of programs.
|
|
||||||
|
|
||||||
**.fill**: Outputs the number of null bytes specified by its argument, an
|
**.fill**: Outputs the number of null bytes specified by its argument, an
|
||||||
expression. Often used with `$` to fill our binary up to a certain
|
expression. Often used with `$` to fill our binary up to a certain
|
||||||
offset. For example, if we want to place an instruction exactly at
|
offset. For example, if we want to place an instruction exactly at
|
||||||
|
@ -112,11 +112,11 @@ symRegister:
|
|||||||
push de ; --> lvl 3
|
push de ; --> lvl 3
|
||||||
ld d, 0
|
ld d, 0
|
||||||
ld e, c
|
ld e, c
|
||||||
add hl, de ; if carry set here, sbc will carry too
|
add hl, de ; if carry set here, sbc will carry too
|
||||||
ld e, (ix+2) ; DE --> pointer to record list, which is also
|
ld e, (ix+2) ; DE --> pointer to record list, which is also
|
||||||
ld d, (ix+3) ; the end of names pool
|
ld d, (ix+3) ; the end of names pool
|
||||||
; DE --> names end
|
; DE --> names end
|
||||||
|
|
||||||
sbc hl, de ; compares hl and de destructively
|
sbc hl, de ; compares hl and de destructively
|
||||||
pop de ; <-- lvl 3
|
pop de ; <-- lvl 3
|
||||||
pop hl ; <-- lvl 2
|
pop hl ; <-- lvl 2
|
||||||
@ -192,11 +192,11 @@ _symFind:
|
|||||||
jr z, .end ; match! Z already set, IY and HL placed.
|
jr z, .end ; match! Z already set, IY and HL placed.
|
||||||
.skip:
|
.skip:
|
||||||
; ok, next!
|
; ok, next!
|
||||||
|
|
||||||
push de ; --> lvl 1
|
push de ; --> lvl 1
|
||||||
ld de, 0x0003
|
ld de, 0x0003
|
||||||
add iy, de ; faster and shorter than three inc's
|
add iy, de ; faster and shorter than three inc's
|
||||||
ld e, (iy-3) ; offset is also compulsory, so no extra bytes used
|
ld e, (iy-3) ; offset is also compulsory, so no extra bytes used
|
||||||
; (iy-3) holds the name length of the string just processed
|
; (iy-3) holds the name length of the string just processed
|
||||||
add hl, de ; advance HL by (iy-3) characters
|
add hl, de ; advance HL by (iy-3) characters
|
||||||
pop de ; <-- lvl 1
|
pop de ; <-- lvl 1
|
||||||
@ -219,13 +219,13 @@ symFindVal:
|
|||||||
push ix
|
push ix
|
||||||
call symIsLabelLocal
|
call symIsLabelLocal
|
||||||
jr z, .local
|
jr z, .local
|
||||||
; global. Let's try labels first, then consts
|
; global. Let's try consts first, then symbols
|
||||||
push hl ; --> lvl 1. we'll need it again if not found.
|
push hl ; --> lvl 1. we'll need it again if not found.
|
||||||
ld ix, SYM_GLOBAL_REGISTRY
|
ld ix, SYM_CONST_REGISTRY
|
||||||
call _symFind
|
call _symFind
|
||||||
pop hl ; <-- lvl 1
|
pop hl ; <-- lvl 1
|
||||||
jr z, .found
|
jr z, .found
|
||||||
ld ix, SYM_CONST_REGISTRY
|
ld ix, SYM_GLOBAL_REGISTRY
|
||||||
call _symFind
|
call _symFind
|
||||||
jr nz, .end
|
jr nz, .end
|
||||||
.found:
|
.found:
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -2,8 +2,11 @@ jp test
|
|||||||
|
|
||||||
.inc "core.asm"
|
.inc "core.asm"
|
||||||
|
|
||||||
|
dummyLabel:
|
||||||
testNum: .db 1
|
testNum: .db 1
|
||||||
|
|
||||||
|
.equ dummyLabel 0x42
|
||||||
|
|
||||||
test:
|
test:
|
||||||
ld hl, 0xffff
|
ld hl, 0xffff
|
||||||
ld sp, hl
|
ld sp, hl
|
||||||
@ -30,6 +33,13 @@ test:
|
|||||||
jp p, fail ; negative
|
jp p, fail ; negative
|
||||||
call nexttest
|
call nexttest
|
||||||
|
|
||||||
|
; Test that .equ can override label
|
||||||
|
ld a, 0x42
|
||||||
|
ld hl, dummyLabel
|
||||||
|
cp l
|
||||||
|
jp nz, fail
|
||||||
|
call nexttest
|
||||||
|
|
||||||
; *** cpHLDE ***
|
; *** cpHLDE ***
|
||||||
ld hl, 0x42
|
ld hl, 0x42
|
||||||
ld de, 0x42
|
ld de, 0x42
|
||||||
|
Loading…
Reference in New Issue
Block a user