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でコンパイル)