Skip to content

Commit

Permalink
version for BK-11M
Browse files Browse the repository at this point in the history
  • Loading branch information
ufasoft committed Nov 30, 2022
1 parent fda9fd9 commit 06fb92f
Show file tree
Hide file tree
Showing 13 changed files with 285 additions and 266 deletions.
23 changes: 15 additions & 8 deletions doc/bklisp.html
Expand Up @@ -2,7 +2,7 @@

<html lang="ru">
<head>
<title>LISP для БК-0010.01, БК-0011М и RT-11</title>
<title>LISP для RT-11, БК-0010.01, БК-0011М</title>
<meta charset="UTF-8">
<meta name="description" content="Ufasoft BkLisp - LISP для БК-0010.01, БК-0011М и RT-11. Справочник.">
<meta name="keywords" content="Lisp, Common Lisp, BkLisp, Ufasoft, БК-0010, БК-0010.01, БК-0011, БК-0011М, PDP-11, RT-11">
Expand Down Expand Up @@ -38,10 +38,10 @@

<article>

<h1>Ufasoft BkLisp - LISP для БК-0010.01, БК-0011М и RT-11<br>
<h1>Ufasoft BkLisp - LISP для RT-11, БК-0010.01, БК-0011М<br>
Справочник
</h1>
<i>Версия 2022.7</i>
<i>Версия 2022.12</i>

<p>Минимальный интерпретатор языка программирования LISP для микро-компьютеров <a href="https://ru.wikipedia.org/wiki/БК_(семейство_компьютеров)">БК-0010.01 и БК-0011М</a>
архитектуры <a href="https://ru.wikipedia.org/wiki/PDP-11">PDP-11</a>, на процессоре <a href="https://ru.wikipedia.org/wiki/К1801ВМ1">К1801ВМ1</a>.
Expand Down Expand Up @@ -278,6 +278,10 @@ <h4 id="simple-vector">Простой вектор - SIMPLE-VECTOR</h4>
<h4 id="stream-type">Поток - STREAM</h4>
<p>Поток ввода или вывода.

<h4 id="file-stream-type">Файл - FILE-STREAM</h4>
<span class="rt11">RT-11</span>
<p>Поток для чтения файла на диске.

<h4 id="function-type">Функция - FUNCTION</h4>
<p>Пользовательская функция или LAMBDA-выражение.

Expand Down Expand Up @@ -2224,7 +2228,7 @@ <h5>Примеры</h5>

<hr/><h4 id="write-char">Функция WRITE-CHAR</h4>
<p><b>write-char</b> character &optional output-stream → character
<a class="clhs" href="http://www.lispworks.com/documentation/HyperSpec/Body/f_wr_cha.htm">CLHS</a>
<a class="clhs" href="http://clhs.lisp.se/Body/f_wr_cha.htm">CLHS</a>
<p>Выводит <i>character</i> в <i>output-stream</i> (по-умолчанию <a href="#*standard-output*">*standard-output*</a>) и возвращает его.
<p>Эта функция базовая, к ней обращаются почти все остальные функции вывода.
<h5>Примеры</h5>
Expand Down Expand Up @@ -2554,14 +2558,17 @@ <h5>Примеры</h5>
<pre>
(defun main ()
(princ "Здравствуй, Мир!")
(read-char)) ; ожидание нажатия ENTER
(read-char)) ; ожидание нажатия ENTER
→ MAIN

(save "hello.sav" 'main) → T
(save "hello.sav" 'main) → T ; для RT-11
(save "hello.bin" 'main) → T ; для БК
(quit)

? M
ИМЯ? hello.sav → Здравствуй, Мир!
.RUN HELLO → Здравствуй, Мир! ; для RT-11

-? M
-ИМЯ? hello.bin → Здравствуй, Мир! ; для БК
</pre>

<hr/><h3>Интерактивный цикл Чтение-Вычисление-Печать <abbr title="Read-Eval-Print-Loop">REPL</abbr></h3>
Expand Down
2 changes: 1 addition & 1 deletion src/bkkeys.inc
Expand Up @@ -5,7 +5,7 @@
;;; BK-0010.01 Keyboard codes

$K.LE = 10 ; Left key
$K.NL = 12 ; Left key
$K.NL = 12 ; NewLine key
$K.TAB = 15
$K.RUS = 16
$K.LAT = 17
Expand Down
135 changes: 118 additions & 17 deletions src/bklisp.mac
Expand Up @@ -17,8 +17,7 @@

.SBTTL Main module

.INCLUDE /macros.inc/

.INCLUDE /macros.inc/



Expand Down Expand Up @@ -58,7 +57,7 @@ $BUFOUT::.BLKB 24. ; Output buffer
;;-----------------------

. = 1000
.INCLUDE /init.mac/
.INCLUDE /init.mac/

. = ASTKUP
.IFF
Expand Down Expand Up @@ -131,7 +130,7 @@ REPL: CLR LEXENV
CLR ERDATA
CLR R2 ; *STANDARD-INPUT*, used also in .CONS
.P.CHR C.NL
.IF NE C$LINE
.IF NE C$GTLI
.IF NE C$RT11
MOV #LPROM, PROMPT
.IFF
Expand All @@ -140,7 +139,7 @@ REPL: CLR LEXENV

.IFF
.P.CHR '>, C.SP
.ENDC ; C$LINE
.ENDC ; C$GTLI


.$READ
Expand Down Expand Up @@ -236,7 +235,7 @@ A.MAIN: .WORD 0
BEQ RESET
CLR R5
CALL FUNCALL
.IIF NE C$RT11, JMP QUIT
.IIF NE C$RT11, .PRED QUIT
.IIF EQ C$RT11, .EXIT


Expand Down Expand Up @@ -352,13 +351,17 @@ DPUFL: MOV (R4)+, R1
DPUFL1: PU.FL
JMP @(R4)+


.IF NE C$FULL
.IF EQ C$BK10

;; Stack: x y => y x y
DOVER: MOV #20, R1
BR DDUP0

.ENDC ; C$BK10


.IF NE C$FULL

;; Stack: x y z => x y z x
DTUCK2: MOV #14, R1
BR DTUCKC
Expand Down Expand Up @@ -477,9 +480,8 @@ P.ERR: .PRINT #$ERROR


;; Return: true if char is constituent
CSTITP: MOV #TERM, R2
MOV #E.TER - TERM, R3
1$: CMPB R1, (R2)+
CSTITP: MOV #E.TER - TERM, R3
1$: CMPB R1, TERM-1(R3)
BEQ.F
SOB R3, 1$
BICB #200, R1
Expand Down Expand Up @@ -533,15 +535,115 @@ PSNAME: MOV #15, R4 ; #words of param block segment
TERM: .ASCII <C.SEMI>/()"'`, /
E.TER: .EVEN

.IIF EQ C$BK10 .INCLUDE /math.mac/
.IIF EQ C$BK10 .INCLUDE /math.mac/

.IF NE C$GTLI
.IF NE C$RT11

$IVEIL: MOV #$BUF, R1
.GTLIN R1, PROMPT
CLR (PC)+
PROMPT: .WORD 0
1$: TSTB (R1)+
BNE 1$
RETURN
LPROM: .ASCII /> /<200> ; prompt
.EVEN

.ENDC ; C$RT11
.ENDC ; C$GTLI


.IF NE C$BK11

$IVEIL: MOV #$BUF, R5
1$: CMP R5, #$BUF + 377
BHIS 9$
.BTTIN
MOV R0, R1
.CCASE
2$: .WORD 7$-2$-2/2
.SBYTE C.NL, <12$-2$/2>
.SBYTE $K.BS, <6$-2$/2> ; Backspace
.SBYTE $K.BC, <3$-2$/2>
.SBYTE $K.LE, <13$-2$/2> ; Left
.SBYTE $K.RI, <14$-2$/2> ; Right
7$: MOVB R1, (R5)+
.BTOUT
TST BCALLW
BEQ 1$
CLR BCALLW
MOV #376, R4
11$: CLRB $BUF(R4)
SOB R4, 11$
BR 1$
12$: .BTOUT #C.CR
.BTOUT #C.NL
16$: TSTB (R5)+
BNE 16$
MOVB R1, -1(R5) ; NewLine
BR 10$
6$: CMP R5, #$BUF
BLOS 1$
DEC R5
MOV R5, R4
8$: MOVB 1(R4), (R4)+
BNE 8$
.BTOUT #33 ; ESC D
.BTOUT #104
.BTOUT #33 ; ESC P
.BTOUT #120
BR 1$
13$: CMP R5, #$BUF
BLOS 1$
DEC R5
.BTOUT
BR 1$
14$: CMP R5, #$BUF + 377
BHIS 1$
INC R5
.BTOUT #33 ; ESC C
.BTOUT #103
BR 1$

3$: TST BCALLW
BEQ 1$
4$: TSTB (R5)+ ; BC
BNE 4$
DEC R5
CMPB -1(R5), #C.NL
BNE 5$
CLRB -(R5)
5$: .BTOUT #33 ; ESC R
.BTOUT #122
.BTOUT #33 ; ESC K
.BTOUT #113

MOV #$BUF, R0
MOV R5, R1
SUB R0, R1
.BEDIT
MOV #$BUF, R5
MOV #C.NL, R1
BR 12$
9$: CLRB (R5)
10$: MOV R5, (PC)+
;; BS key is allowed
BCALLW: .WORD 1
MOV R5, R1
RETURN

.ENDC ; C$BK11


.IF NE C$RT11

;; Parse Command Line into *ARGS* variable
;; Returns R1: *ARGS*
PARSCL::
MOV #$CLLEN, R3
MOV (R3)+, R5 ; R5: command line length
MOV (R3), R5 ; R5: command line length
MOV #1, (R3)+
.SUBR MKSOS
MOV R1, R2 ; R2: (MAKE-STRING-OUTPUT-STREAM)
3$: DEC R5
Expand All @@ -562,10 +664,9 @@ PARSCL::
.GPLAC
.NREV0

MOV #66., R2
8$: CLRB $CLLEN-1(R2) ; Clear command line
MOV #64., R2
8$: CLRB $CLBUF-1(R2) ; Clear command line
SOB R2, 8$
MOV #1, $CLLEN

MOV R1, (R4) ; (SETQ *ARGS* (command-line args))
RETURN
Expand Down Expand Up @@ -698,7 +799,7 @@ ALGN4
A.LTYP: .ASCIP <Ufasoft BkLisp>

ALGN4
A.LVER: .ASCIP <2022>
A.LVER: .ASCIP <2022.12>

ALGN4
A.MTYP: .ASCIP <PDP-11>
Expand Down
13 changes: 8 additions & 5 deletions src/defcfg.inc
Expand Up @@ -5,15 +5,19 @@
;;; Default Configuration definitions for BkLisp


.INCLUDE /config.inc/
.INCLUDE /config.inc/


.LIST ME ; Macro expansions
.ENABL AMA ; address mode 37
.ENABL LC

...EMT = 1 ; Use EMT API for BK-0011M

...EMT = 1 ; Use EMT API for BK-0011M

;; Define C$xxxx on C.xxxx definitions
;; C.xxx are necessary because bash/make/nmake have inconsistent escaping rules of '$' char
.IIF DF C.AMAL, C$AMAL=C.AMAL
.IIF DF C.RT11, C$RT11=C.RT11
.IIF DF C.BK10, C$BK10=C.BK10
.IIF DF C.BK11, C$BK11=C.BK11
Expand All @@ -39,9 +43,8 @@
.IIF NDF C$FILE, C$FILE = C$RT11 ; File operations
.IIF NDF C$FEXT, C$FEXT = 0 ; Extended file operations: .GFDAT

.IIF NDF C$RU, C$RU = 1 ; Russian 15IE display features

.IIF NDF C$LINE, C$LINE = 1 ; Use .GTLIN in RT-11
.IIF NDF C$GTLI, C$GTLI = C$RT11 ; Use .GTLIN in RT-11
.IIF NDF C$RU, C$RU = C$RT11 ; Russian 15IE display features


VALLIM = 20. ; MULTIPLE-VALUES-LIMIT
21 changes: 12 additions & 9 deletions src/init.mac
Expand Up @@ -4,7 +4,7 @@

;;; Initialization code, discarded after starting

.INCLUDE /k1801.inc/
.INCLUDE /k1801.inc/

.SBTTL Init module

Expand Down Expand Up @@ -224,7 +224,7 @@ INIT4:

MOV (R1), R1 ; R1: command-line
.PRED LOAD
JMP QUIT
.PRED QUIT
5$:
.IFF
MOV #ASTKUP, SP
Expand All @@ -234,26 +234,29 @@ INIT4:
JMP RESET
; JMP LOADER

.IF NE C$RT11
;; Init error message to be russian
IRUERR: MOV #RU.ERR, R1
MOV #$ERROR, R2
2$: MOVB (R1)+, (R2)+
BNE 2$
RETURN
.ENDC ; C$RT11


MODE64: .ASCII <033><061><C.CR><C.NL> ; 64 columns/line
STATUS: .ASCII "BkLisp 2022 ufasoft.com/bklisp"
STATUS: .ASCII "BkLisp 2022.12 ufasoft.com/bklisp"
.IF NE C$RT11
.ASCII / /
.IFF
ESTATU: .ASCII <C.CR><C.NL>
.IIF NE C$BK10 ESTATU: .ASCII <C.CR><C.NL>
.IIF EQ C$BK10 .ASCII / /
.ENDC ; C$RT11
GREET: .ASCII "Lisp for "
.IIF NE C$RT11 .ASCII "RT-11"
.IIF NE C$BK10 .ASCII <C.CY.B><C.CY.K>"-0010.01"
.IIF NE C$BK11 .ASCII <C.CY.B><C.CY.K>"-0011["<C.CY.M>"]"
.ASCIZ " (c) Sergey Pavlov dev@ufasoft.com"<C.CR>
.IIF NE C$BK10, GREET: .ASCII "Lisp for "
.IIF NE C$RT11, .ASCII "RT-11"
.IIF NE C$BK10, .ASCII <C.CY.B><C.CY.K>"-0010.01"
.IIF NE C$BK11, .ASCII <C.CY.B><C.CY.K>"-0011["<C.CY.M>"]"
.ASCIZ " (c) Sergey Pavlov"<C.CR>
INCMPT: .ASCIZ <C.CR><C.NL>/ERROR!/<C.CR><C.NL>/Incompatible System detected/
BK11ME:
.IIF NE C$BK10 .ASCIZ <C.CR>/For /<C.CY.B><C.CY.K>/-0011[/<C.CY.M>/] run bklisp.11m/
Expand Down

0 comments on commit 06fb92f

Please sign in to comment.