forth: Forth-ify "2*" stack management words
This commit is contained in:
parent
67c55b0b2f
commit
d6516e2122
Binary file not shown.
@ -1405,28 +1405,10 @@ SWAP:
|
|||||||
push hl
|
push hl
|
||||||
jp next
|
jp next
|
||||||
|
|
||||||
; ( a b c d -- c d a b )
|
|
||||||
.db "2SWAP"
|
|
||||||
.fill 2
|
|
||||||
.dw $-SWAP
|
|
||||||
.db 0
|
|
||||||
SWAP2:
|
|
||||||
.dw nativeWord
|
|
||||||
pop de ; D
|
|
||||||
pop hl ; C
|
|
||||||
pop bc ; B
|
|
||||||
call chkPS
|
|
||||||
|
|
||||||
ex (sp), hl ; A in HL
|
|
||||||
push de ; D
|
|
||||||
push hl ; A
|
|
||||||
push bc ; B
|
|
||||||
jp next
|
|
||||||
|
|
||||||
; ( a -- a a )
|
; ( a -- a a )
|
||||||
.db "DUP"
|
.db "DUP"
|
||||||
.fill 4
|
.fill 4
|
||||||
.dw $-SWAP2
|
.dw $-SWAP
|
||||||
.db 0
|
.db 0
|
||||||
DUP:
|
DUP:
|
||||||
.dw nativeWord
|
.dw nativeWord
|
||||||
@ -1436,26 +1418,10 @@ DUP:
|
|||||||
push hl
|
push hl
|
||||||
jp next
|
jp next
|
||||||
|
|
||||||
; ( a b -- a b a b )
|
|
||||||
.db "2DUP"
|
|
||||||
.fill 3
|
|
||||||
.dw $-DUP
|
|
||||||
.db 0
|
|
||||||
DUP2:
|
|
||||||
.dw nativeWord
|
|
||||||
pop hl ; B
|
|
||||||
pop de ; A
|
|
||||||
call chkPS
|
|
||||||
push de
|
|
||||||
push hl
|
|
||||||
push de
|
|
||||||
push hl
|
|
||||||
jp next
|
|
||||||
|
|
||||||
; ( a b -- a b a )
|
; ( a b -- a b a )
|
||||||
.db "OVER"
|
.db "OVER"
|
||||||
.fill 3
|
.fill 3
|
||||||
.dw $-DUP2
|
.dw $-DUP
|
||||||
.db 0
|
.db 0
|
||||||
OVER:
|
OVER:
|
||||||
.dw nativeWord
|
.dw nativeWord
|
||||||
@ -1467,29 +1433,9 @@ OVER:
|
|||||||
push de
|
push de
|
||||||
jp next
|
jp next
|
||||||
|
|
||||||
; ( a b c d -- a b c d a b )
|
|
||||||
.db "2OVER"
|
|
||||||
.fill 2
|
|
||||||
.dw $-OVER
|
|
||||||
.db 0
|
|
||||||
OVER2:
|
|
||||||
.dw nativeWord
|
|
||||||
pop hl ; D
|
|
||||||
pop de ; C
|
|
||||||
pop bc ; B
|
|
||||||
pop iy ; A
|
|
||||||
call chkPS
|
|
||||||
push iy ; A
|
|
||||||
push bc ; B
|
|
||||||
push de ; C
|
|
||||||
push hl ; D
|
|
||||||
push iy ; A
|
|
||||||
push bc ; B
|
|
||||||
jp next
|
|
||||||
|
|
||||||
.db ">R"
|
.db ">R"
|
||||||
.fill 5
|
.fill 5
|
||||||
.dw $-OVER2
|
.dw $-OVER
|
||||||
.db 0
|
.db 0
|
||||||
P2R:
|
P2R:
|
||||||
.dw nativeWord
|
.dw nativeWord
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
3 CONSTANT AF
|
3 CONSTANT AF
|
||||||
3 CONSTANT SP
|
3 CONSTANT SP
|
||||||
|
|
||||||
|
( As a general rule, IX and IY are equivalent to spitting an
|
||||||
|
extra 0xdd / 0xfd and then spit the equivalent of HL )
|
||||||
|
: IX 0xdd A, HL ;
|
||||||
|
: IY 0xfd A, HL ;
|
||||||
|
|
||||||
( -- )
|
( -- )
|
||||||
: OP1 CREATE C, DOES> C@ A, ;
|
: OP1 CREATE C, DOES> C@ A, ;
|
||||||
0xc9 OP1 RET,
|
0xc9 OP1 RET,
|
||||||
|
@ -30,4 +30,44 @@ CODE ROT
|
|||||||
BC PUSHqq, ( A )
|
BC PUSHqq, ( A )
|
||||||
;CODE
|
;CODE
|
||||||
|
|
||||||
|
( a b -- a b a b )
|
||||||
|
CODE 2DUP
|
||||||
|
HL POPqq, ( B )
|
||||||
|
DE POPqq, ( A )
|
||||||
|
ROUTINE P CALLnn,
|
||||||
|
DE PUSHqq, ( A )
|
||||||
|
HL PUSHqq, ( B )
|
||||||
|
DE PUSHqq, ( A )
|
||||||
|
HL PUSHqq, ( B )
|
||||||
|
;CODE
|
||||||
|
|
||||||
|
( a b c d -- a b c d a b )
|
||||||
|
|
||||||
|
CODE 2OVER
|
||||||
|
HL POPqq, ( D )
|
||||||
|
DE POPqq, ( C )
|
||||||
|
BC POPqq, ( B )
|
||||||
|
IY POPqq, ( A )
|
||||||
|
ROUTINE P CALLnn,
|
||||||
|
IY PUSHqq, ( A )
|
||||||
|
BC PUSHqq, ( B )
|
||||||
|
DE PUSHqq, ( C )
|
||||||
|
HL PUSHqq, ( D )
|
||||||
|
IY PUSHqq, ( A )
|
||||||
|
BC PUSHqq, ( B )
|
||||||
|
;CODE
|
||||||
|
|
||||||
|
( a b c d -- c d a b )
|
||||||
|
|
||||||
|
CODE 2SWAP
|
||||||
|
HL POPqq, ( D )
|
||||||
|
DE POPqq, ( C )
|
||||||
|
BC POPqq, ( B )
|
||||||
|
IY POPqq, ( A )
|
||||||
|
ROUTINE P CALLnn,
|
||||||
|
DE PUSHqq, ( C )
|
||||||
|
HL PUSHqq, ( D )
|
||||||
|
IY PUSHqq, ( A )
|
||||||
|
BC PUSHqq, ( B )
|
||||||
|
;CODE
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user