Просмотр исходного кода

forth: Forth-ify "ABORT"

pull/95/head
Virgil Dupras 4 лет назад
Родитель
Сommit
e0eaa8ba63
5 измененных файлов: 41 добавлений и 28 удалений
  1. Двоичные данные
      emul/forth/z80c.bin
  2. +6
    -18
      forth/forth.asm
  3. +4
    -2
      forth/icore.fs
  4. +26
    -8
      forth/z80a.fs
  5. +5
    -0
      forth/z80c.fs

Двоичные данные
emul/forth/z80c.bin Просмотреть файл


+ 6
- 18
forth/forth.asm Просмотреть файл

@@ -117,10 +117,12 @@ JUMPTBL:
jp nativeWord jp nativeWord
jp next jp next
jp chkPS jp chkPS
; 24
NUMBER: NUMBER:
.dw numberWord .dw numberWord
LIT: LIT:
.dw litWord .dw litWord
.dw INITIAL_SP


; *** Code *** ; *** Code ***
forthMain: forthMain:
@@ -130,7 +132,7 @@ forthMain:
; ourselves a nice 6 bytes buffer. 6 bytes because we seldom have words ; ourselves a nice 6 bytes buffer. 6 bytes because we seldom have words
; requiring more than 3 items from the stack. Then, at each "exit" call ; requiring more than 3 items from the stack. Then, at each "exit" call
; we check for stack underflow. ; we check for stack underflow.
push af \ push af \ push af
ld sp, 0xfffa
ld (INITIAL_SP), sp ld (INITIAL_SP), sp
ld ix, RS_ADDR ld ix, RS_ADDR
; LATEST is a label to the latest entry of the dict. This can be ; LATEST is a label to the latest entry of the dict. This can be
@@ -185,7 +187,7 @@ INTERPRET:
.dw DROP .dw DROP
.dw EXECUTE .dw EXECUTE


.fill 43
.fill 41


; *** Collapse OS lib copy *** ; *** Collapse OS lib copy ***
; In the process of Forth-ifying Collapse OS, apps will be slowly rewritten to ; In the process of Forth-ifying Collapse OS, apps will be slowly rewritten to
@@ -650,20 +652,6 @@ QUIT:
ld ix, RS_ADDR ld ix, RS_ADDR
jp next jp next


.db "ABORT"
.dw $-QUIT
.db 5
ABORT:
.dw compiledWord
.dw .private
.dw QUIT

.private:
.dw nativeWord
; Reinitialize PS
ld sp, (INITIAL_SP)
jp next

abortUnderflow: abortUnderflow:
ld hl, .name ld hl, .name
call find call find
@@ -672,10 +660,10 @@ abortUnderflow:
.name: .name:
.db "(uflw)", 0 .db "(uflw)", 0


.fill 18
.fill 41


.db "BYE" .db "BYE"
.dw $-ABORT
.dw $-QUIT
.db 3 .db 3
BYE: BYE:
.dw nativeWord .dw nativeWord


+ 4
- 2
forth/icore.fs Просмотреть файл

@@ -49,6 +49,8 @@
, ( write! ) , ( write! )
; IMMEDIATE ; IMMEDIATE


: ABORT _c (resSP) QUIT ;

: INTERPRET : INTERPRET
BEGIN BEGIN
WORD WORD
@@ -71,7 +73,7 @@
( This is only the "early parser" in earlier stages. No need ( This is only the "early parser" in earlier stages. No need
for an abort message ) for an abort message )
: (parse) : (parse)
(parsed) SKIP? ABORT
(parsed) SKIP? _c ABORT
; ;


( a -- ) ( a -- )
@@ -87,7 +89,7 @@
; ;


: (uflw) : (uflw)
LIT< stack-underflow _c (print) ABORT
LIT< stack-underflow _c (print) _c ABORT
; ;


: C, : C,


+ 26
- 8
forth/z80a.fs Просмотреть файл

@@ -32,6 +32,9 @@
: IY+ _iy+- ; : IY+ _iy+- ;
: IY- 0 -^ _iy+- ; : IY- 0 -^ _iy+- ;


: <<3 8 * ;
: <<4 16 * ;

( -- ) ( -- )
: OP1 CREATE C, DOES> C@ A, ; : OP1 CREATE C, DOES> C@ A, ;
0x76 OP1 HALT, 0x76 OP1 HALT,
@@ -48,7 +51,7 @@
DOES> DOES>
C@ ( r op ) C@ ( r op )
SWAP ( op r ) SWAP ( op r )
8 * ( op r<<3 )
<<3 ( op r<<3 )
OR A, OR A,
; ;
0x04 OP1r INCr, 0x04 OP1r INCr,
@@ -72,7 +75,7 @@
DOES> DOES>
C@ ( qq op ) C@ ( qq op )
SWAP ( op qq ) SWAP ( op qq )
16 * ( op qq<<4 )
<<4 ( op qq<<4 )
OR A, OR A,
; ;
0xc5 OP1qq PUSHqq, 0xc5 OP1qq PUSHqq,
@@ -84,7 +87,7 @@
: _1rr : _1rr
C@ ( rd rr op ) C@ ( rd rr op )
ROT ( rr op rd ) ROT ( rr op rd )
8 * ( rr op rd<<3 )
<<3 ( rr op rd<<3 )
OR OR A, OR OR A,
; ;


@@ -125,7 +128,7 @@
DOES> DOES>
C@ ( r n op ) C@ ( r n op )
ROT ( n op r ) ROT ( n op r )
8 * ( n op r<<3 )
<<3 ( n op r<<3 )
OR A, A, OR A, A,
; ;
0x06 OP2rn LDrn, 0x06 OP2rn LDrn,
@@ -137,7 +140,7 @@
0xcb A, 0xcb A,
C@ ( b r op ) C@ ( b r op )
ROT ( r op b ) ROT ( r op b )
8 * ( r op b<<3 )
<<3 ( r op b<<3 )
OR OR A, OR OR A,
; ;
0xc0 OP2br SETbr, 0xc0 OP2br SETbr,
@@ -167,7 +170,7 @@
DOES> DOES>
@ SPLITB SWAP ( r lsb msb ) @ SPLITB SWAP ( r lsb msb )
A, ( r lsb ) A, ( r lsb )
SWAP 8 * ( lsb r<<3 )
SWAP <<3 ( lsb r<<3 )
OR A, OR A,
; ;
0xed41 OP2r OUT(C)r, 0xed41 OP2r OUT(C)r,
@@ -179,7 +182,7 @@
DOES> DOES>
0xed A, 0xed A,
C@ SWAP ( op ss ) C@ SWAP ( op ss )
16 * ( op ss<< 4 )
<<4 ( op ss<< 4 )
OR A, OR A,
; ;
0x4a OP2ss ADCHLss, 0x4a OP2ss ADCHLss,
@@ -191,7 +194,7 @@
DOES> DOES>
C@ ( dd nn op ) C@ ( dd nn op )
ROT ( nn op dd ) ROT ( nn op dd )
16 * ( nn op dd<<4 )
<<4 ( nn op dd<<4 )
OR A, OR A,
SPLITB A, A, SPLITB A, A,
; ;
@@ -222,6 +225,21 @@
0x10 OPJR DJNZe, 0x10 OPJR DJNZe,


( Specials ) ( Specials )

( dd nn -- )
: LDdd(nn),
0xed A,
SWAP <<4 0x4b OR A,
SPLITB A, A,
;

( nn dd -- )
: LD(nn)dd,
0xed A,
<<4 0x43 OR A,
SPLITB A, A,
;

( JTBL+18 == next ) ( JTBL+18 == next )
: JPNEXT, [ JTBL 18 + LITN ] JPnn, ; : JPNEXT, [ JTBL 18 + LITN ] JPnn, ;




+ 5
- 0
forth/z80c.fs Просмотреть файл

@@ -245,3 +245,8 @@ CODE IMMED?
( notset ) ( notset )
DE PUSHqq, DE PUSHqq,
;CODE ;CODE

CODE (resSP)
( INITIAL_SP == JTBL+28 )
SP JTBL 28 + @ LDdd(nn),
;CODE

Загрузка…
Отмена
Сохранить