最新 RSS

tips@free BLOG

レトロなマイコン、電子工作、PCやフリーソフト関係のTipsと私的備忘録

2014/01/23

[z80][xlisp]自作Z80 CP/Mマシン(40)

引き続き XLISP ver1.1のメモ。

if関数もちゃんと動くようになったので簡単なプログラムを書いてみました。

P>TYPE TEST.LSP
; TEST.LSP

;
; 関数 nib 0〜15を"0"〜"F"に変換
;

(defun nib (n)
  (chr (+ n (if (< n 10) 48 55))))

;
; 関数 byte 0〜255を"00"〜"FF"に変換
;

(defun byte (n)
   (strcat (nib (& 15 (/ n 16)))
           (nib (& 15 n))))

;
; 0〜255 まで16進で表示、16ごとに改行する
;
(setq i 0)
(while (< i 256)
   (princ (byte i)    
      (if (== (% i 16) 15) "\n" " "))
   (setq i (+ i 1)))


P>XLISP TEST.LSP                                <-- 実行する
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
P>

ファイルの内容を表示する(例では"MAKEFILE")

P>TYPE TEST2.LSP

;
; TEST2.LSP ファイルの内容を表示
;
(setq f (fopen "MAKEFILE" "r"))
(while (setq c (getc f))
  (princ (chr c))
)
(fclose f)
(exit)

P>XLISP TEST2.LSP            <-- 実行する
CC      = j:c
CFLAGS = -O
# CFLAGS = -g -O0

objs =  xlisp.obj xlread.obj xleval.obj xlprin.obj xlbind.obj \
        xlsubr.obj xllist.obj xlmath.obj xlobj.obj \
        xlfio.obj xlio.obj xlstr.obj xldmem.obj 

xlisp: $(objs)

$(objs): xlisp.h

.c.obj:
        $(CC) $(CFLAGS) -c $<

clean:
        era xl*.obj
        era xlisp.com
        era link.map

P>

ファイルを16進ダンプする(例では"MAKEFILE")

P>TYPE TEST3.LSP
;
; TEST3.LSP - ファイルを16進ダンプする
;
(defun nib (n)
   (chr (+ n (if (< n 10) 48 55))))

(defun byte (n)
  (strcat (nib (& 15 (/ n 16))) (nib (& 15 n))))

(setq i 0)
(setq f (fopen "MAKEFILE" "rb"))
(while (setq c (getc f))
   (princ (byte c)
      (if (== (% i 16) 15) "\n" " "))
   (setq i (+ i 1)))
(fclose f)
(exit)

P>XLISP TEST3.LSP                              <-- 実行する
43 43 09 3D 20 6A 3A 63 0D 0A 43 46 4C 41 47 53
20 3D 20 2D 4F 0D 0A 23 20 43 46 4C 41 47 53 20
3D 20 2D 67 20 2D 4F 30 0D 0A 0D 0A 6F 62 6A 73
20 3D 20 09 78 6C 69 73 70 2E 6F 62 6A 20 78 6C
72 65 61 64 2E 6F 62 6A 20 78 6C 65 76 61 6C 2E
6F 62 6A 20 78 6C 70 72 69 6E 2E 6F 62 6A 20 78
6C 62 69 6E 64 2E 6F 62 6A 20 5C 0D 0A 09 78 6C
73 75 62 72 2E 6F 62 6A 20 78 6C 6C 69 73 74 2E
6F 62 6A 20 78 6C 6D 61 74 68 2E 6F 62 6A 20 78
6C 6F 62 6A 2E 6F 62 6A 20 5C 0D 0A 09 78 6C 66
69 6F 2E 6F 62 6A 20 78 6C 69 6F 2E 6F 62 6A 20
78 6C 73 74 72 2E 6F 62 6A 20 78 6C 64 6D 65 6D
2E 6F 62 6A 0D 0A 0D 0A 78 6C 69 73 70 3A 20 24
28 6F 62 6A 73 29 0D 0A 0D 0A 24 28 6F 62 6A 73
29 3A 20 78 6C 69 73 70 2E 68 0D 0A 0D 0A 2E 63
2E 6F 62 6A 3A 0D 0A 09 24 28 43 43 29 20 24 28
43 46 4C 41 47 53 29 20 2D 63 20 24 3C 0D 0A 0D
0A 63 6C 65 61 6E 3A 0D 0A 09 65 72 61 20 78 6C
2A 2E 6F 62 6A 0D 0A 09 65 72 61 20 78 6C 69 73
70 2E 63 6F 6D 0D 0A 09 65 72 61 20 6C 69 6E 6B
2E 6D 61 70 0D 0A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
P>
 

(環境は CP/M Z80 HI-TECH C ver3.09でコンパイル)

コメント
お名前 コメント