1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-19 01:27:05 +00:00
PDP-10.its/src/alan/macits.13
2016-12-23 07:23:28 -08:00

111 lines
2.3 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; -*- Midas -*-
title MacITS - Library of MacLisp/ITS interface routines
.fasl
if1, .insrt sys:.fasl defs
maxpush==10 ; Largest n for which 0PUSH-n will work.
; (%GETSYS name) returns a list of fixnums representing the data returned by
; .GETSYS for SIXBIT /name/.
.entry %GETSYS SUBR 2 ; 1 arg
pushj p,sixmak ; TT: sixbit argument
move r,tt ; R=D+1: area name
setzi a, ; A: accumulate list of answers
jsp t,0push-maxpush ; Make room for data area on FXPDL
hrrzi d,1-maxpush(fxp)
hrli d,-maxpush ; D: aobjn to data area
.getsys d,
jrst getsy2
subi d,1-maxpush(fxp) ; RH(D): # of words of data
hlre tt,d
imul tt,[-<1,,1>]
sub fxp,tt ; Discard extra words from FXPDL
hrrzi f,(d) ; F: # of words of data
jumple f,cpopj ; No words => all done
getsy1: movei b,(a)
pop fxp,tt
jsp t,fxcons
jsp t,%cons
sojg f,getsy1
popj p,
getsy2: sub fxp,r70+maxpush
jumpe r,cpopj
hlre tt,d ; TT: -# words needed
movn f,tt ; F: # words delivered
push fxp,[0] ; allocate that many on FXPDL
aojl tt,.-1
.getsys d,
.lose ; Can't happen.
jrst getsy1
; (%EVAL name) looks up the name in Exec DDT's symbol table. Returns NIL
; if the symbol isn't found.
.entry %EVAL SUBR 2 ; 1 arg
pushj p,squeeze
.eval tt,
tdza a,a
jrst fix1
popj p,
; (%GETLOC addr) return the contents addr in the system.
.entry %GETLOC SUBR 2 ; 1 arg
push p,cfix1 ; NCALLable
jsp t,fxnv1
hrlzi t,(tt)
hrri t,tt
.getloc t,
popj p,
; (%SIXBIT name) returns a number.
.entry %SIXBIT SUBR 2 ; 1 arg
push p,cfix1 ; NCALLable
jrst sixmak
; (%UNSIXBIT num) returns a symbol.
.entry %UNSIXBIT SUBR 2 ; 1 arg
jsp t,fxnv1
jrst sixatm
; SQUOZE SIXBIT
; 0
; 1 - 12 "0" - "9" 20 - 31
; 13 - 44 "A" - "Z" 41 - 72
; 45 "*" 12
; 46 "$" 04
; 47 "%" 05
; (%SQUOZE name) returns a number.
.entry %SQUOZE SUBR 2 ; 1 arg
push p,cfix1 ; NCALLable
jrst squeeze
; (%UNSQUOZE num) returns a symbol.
; Works by converting to SIXBIT because MacLisp lacks a built-in routine to
; do this properly.
.entry %UNSQUOZE SUBR 2 ; 1 arg
jsp t,fxnv1
ldb d,[004000,,tt] ; D: squoze number less flags
setzi f,
unsqu1: idivi d,50
jumpe r,unsqu3
cail r,45
jrst unsqu2
addi r,'A-13
caige r,'A
subi r,<'A-1>-'9
unsqu3: lshc r,-6
jumpn d,unsqu1
move tt,f
jrst sixatm
unsqu2: subi r,45-'*
caie r,'*
subi r,<'*+1>-'$
jrst unsqu3
fasend