FORM,WICS,GAME,TL/1..8ビット機の独自言語

このエントリーをはてなブックマークに追加
357ナイコンさん:2014/12/28(日) 21:58:00.86
とりあえず屏風から出さずに虎退治を語ってても仕方がない。
358ナイコンさん:2014/12/28(日) 22:52:50.24
TL/1は、UCSD Pascal買えない・CP/M買えない、当時の小僧達が
再帰呼び出しの凄さを思い知れただけじゃないかと。
(俺はαβ枝刈りがNegaMax形式になってビックリした)

モティロン、たらい回し関数が帰ってこなかったり、VRAM化けたりもビックリ。
359ナイコンさん:2014/12/28(日) 23:08:14.73
確かこんなコードが落ちるんじゃなかったか>TL/1(Z80)
自信ないけど

VAR I;
VAR SUMH, SUML;

SUML := 0; SUMH := 0;

FOR I := 1 TO 100 DO
BEGIN
SUML := SUML + I; SUMH := SUMH ADC 0;
END;


IXをスタックフレームにしたら
LD A,#0; LD (IX+_SUML),A
LD A,#0; LD (IX+_SUMH),A
LD A,#1; LD (IX+_I),A
_1:
LD A,(IX+_I); CMP A,#100; JNC _2
LD A,(IX+_SUML); ADD A,(IX+_I); LD (IX+_SUML),A
LD A,(IX+_SUMH); ADC A,#0; LD (IX+_SUMH),A
LD A,(IX+_I); INC A; LD (IX+_I),A
JMP _1
_2:

アセムブラ怪しくてスマヌ
360ナイコンさん:2014/12/28(日) 23:33:23.18
8bit浮動小数点(1bit符号+3bit指数部+4bit仮数部)フォーマットつーのもあるみたいだから
世が世ならレイトレぐらいできたかもな>TL/1
361ナイコンさん:2014/12/29(月) 04:19:51.95
>>359
そのZ80コードじゃ1から99までしか足さないけどいいの?
ツーか問題なく_2: までフツーに処理して抜けると思うがどこで「落ちる」って
言いたいのかわけわからん。
362ナイコンさん:2014/12/29(月) 04:45:16.99
>こんなコードが落ちるんじゃなかったか

「こんなソースコードを書くと暴走(又は無限ループ)するんじゃなかったか」

と解釈するのが普通。

どうやら

「こんなコードを出力するんじゃなかったか」

とでも言いたかったようではあるが。
363ナイコンさん:2014/12/29(月) 12:39:41.45
一般人・ライトユーザの集まりでならともかく
こんなスレでくらい出力することを落とす/落ちる/吐くあたりの表現で通じていいと思う
364ナイコンさん:2014/12/29(月) 13:50:53.67
「コードが落ちる」じゃ通じないよ
365ナイコンさん:2014/12/29(月) 14:30:09.74
でコンパイラどこで落とせばいいの?
366359:2014/12/29(月) 14:43:05.04
そーか、「コンパイラがコードを落とす」って通じなかったか、スマヌ。

>そのZ80コードじゃ1から99までしか足さないけどいいの?
あー、1足りなかったか。
でも本家のFORループは、も少し複雑だった気がする。
これだと
FOR i :=0 TO 255 DO
などの時の処理が出来ないから。
367ナイコンさん:2014/12/29(月) 14:58:46.85
いやいやコンパイラ絡みの話をしたい人になら通じると考えて当然でしょ…
368ナイコンさん:2014/12/29(月) 15:11:01.11
「(こういうソースを書くと)こういうコードに落ちる」なら通じはするが
「コードが落ちる」は変。クラッシュの意味にしかならない。
369ナイコンさん:2014/12/29(月) 15:22:41.40
ソースをコンパイラがコードに落とす
コードをデコンパイラがソースに、、、なんだろ?
370ナイコンさん:2014/12/29(月) 15:29:55.72
コンパイラ云々の文脈での「コードが落ちる」の用例は、「コードに落ちる」に
対して大変希少なので、使うには自分の意図が正しく伝わるかは十分に注意すべき。

「コンパイラ "コードが落ちる"」の検索
https://www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9+%22%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8C%E8%90%BD%E3%81%A1%E3%82%8B%22&ie=UTF-8
> 3 件 (0.12 秒)

「コンパイラ "コードに落ちる"」の検索
https://www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9+%22%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E8%90%BD%E3%81%A1%E3%82%8B%22&ie=UTF-8
> 約 532,000 件 (0.13 秒)
371ナイコンさん:2014/12/29(月) 15:33:40.55
>>366
> そーか、「コンパイラがコードを落とす」って通じなかったか、スマヌ。

自分の投稿見直してみ
372ナイコンさん:2014/12/29(月) 15:33:51.37
起こすでいいんだろうか?
373ナイコンさん:2014/12/29(月) 17:22:08.78
小房の頃「言葉のきまり」って授業あったよね
374366:2014/12/29(月) 19:37:55.51
ソースコードを生成するコンパイラじゃ無いから、
バイナリを逆アセンブルしたらこんな感じになった気がする。
に訂正しておく。ごめんねいろいろ。
375ナイコンさん:2014/12/29(月) 20:23:58.76
お、すげえレスが増えてると思ったら...
376ナイコンさん:2014/12/29(月) 23:44:59.86
まあ冬休みだしね
377ナイコンさん:2014/12/30(火) 21:06:14.72
そいや、TL/1の6502版の実装って、スタックフレームどうやってるんだ?
引数と変数領域は自前で管理か?
378ナイコンさん:2014/12/31(水) 17:58:19.63
TL/1 AppleII版は作者が中学生だか高校生だかじゃなかったか?
379ナイコンさん:2015/01/02(金) 02:14:57.47
>>377
覚えてないけど、ゼロページにフレームポインタを割り当てて
LDY #ARGA
LDA (0),Y
とかでアクセスすればいいんじゃないかな。
Z80でもTL/1が8ビットなのを考えると、引数を積むのにPUSH(16ビット単位)が使えないし、
スタックを使うメリットはあんまり無いような気もする。
380ナイコンさん:2015/01/02(金) 02:27:25.55
>Z80でもTL/1が8ビットなのを考えると、引数を積むのにPUSH(16ビット単位)が使えないし、


使えないわけはない
381ナイコンさん:2015/01/02(金) 12:28:21.55
>>380
Z80だとバイト単位でのPUSHは出来ないよw
上位バイト無視とかだとメモリの無駄が多すぎるし。
382ナイコンさん:2015/01/02(金) 12:45:46.17
>使えないわけはない
まー引数を60個近く渡すバカも居ないとは思うが
6502ユーザーからしたらスタックの1バイトは血の一滴以上だからもったいないっちゃもったいない
383ナイコンさん:2015/01/02(金) 14:45:37.45
>Z80だとバイト単位でのPUSHは出来ないよw

;AをPUSH
PUSH AF
INC SP
384ナイコンさん:2015/01/02(金) 17:13:53.71
>>383
PUSH AFは2バイトPUSHしとるがな
1バイトのPUSH命令はあるの?

そうやって複数命令使ってもいいことにするなら
たいていの「できないこと」は無いことになってしまうな
385ナイコンさん:2015/01/02(金) 17:19:35.36
>そうやって複数命令使ってもいいことにするなら
>たいていの「できないこと」は無いことになってしまうな

プログラミングって複数命令を組み合わせる作業だけど何言ってんの??
386ナイコンさん:2015/01/02(金) 17:30:21.78
>>379「引数を積むのにPUSH(16ビット単位)が使えない」
>>380「使えないわけはない」
>>381「Z80だとバイト単位でのPUSHは出来ないよw」

使える|使えない という話に対して「出来ない」とか言い出した>>381がアフォ
387ナイコンさん:2015/01/02(金) 17:35:06.48
>>382
>まー引数を60個近く渡すバカも居ないとは思うが

「引数を60個近く」って何の話?

>6502ユーザーからしたらスタックの1バイトは血の一滴以上だからもったいないっちゃもったいない

貧乏CPUのユーザーの話はZ80は関係ないのでは?
388ナイコンさん:2015/01/02(金) 18:43:44.34
お前、35年前の俺だろ?
389ナイコンさん:2015/01/02(金) 20:22:50.51
>>387
35年後のお前はハゲだってよ
390ナイコンさん:2015/01/02(金) 21:07:36.50
ワラタ。昔の俺じゃしょうがない
391ナイコンさん:2015/01/02(金) 23:25:49.90
いや、35年前の俺なら「貧乏CPU」などとは言うまい。
ファミコンが出るまでは、なんつーの?「ヤナセの外車」のイメージ>6502
392ナイコンさん:2015/01/03(土) 07:22:57.67
車に興味がないので
「ヤナセの外車」という例えがわかりません・・(´・ω・`)
393ナイコンさん:2015/01/03(土) 11:14:45.09
本国の3倍の値段でぼったくる悪徳輸入業者ってイメージしかないなw
394Artane. ◆1o3c8RYIzjU0 :2015/01/26(月) 07:14:05.60
>>391
ファミコンは、コアが6502互換なだけで、ブツはリコーが開発した、今で言うSoCの走りのようなカスタムチップだったような。
395ナイコンさん:2015/01/26(月) 21:36:07.39
>>383
それならHLをフレームポインタにして
DEC HL
LD (HL),A
の方が良いな。
396ナイコンさん:2015/01/26(月) 21:53:16.28
>>395
バイト単位でのPUSHが出来るかどうかって話でしょ
397ナイコンさん:2015/01/26(月) 22:02:51.12
>>395
2バイトのPUSHが混在することは目に見えてんのに馬鹿なの?
398ナイコンさん:2015/01/27(火) 02:39:44.16
>>396
バイト単位でのPUSHは出来ないのが明らかで、
それでもコンパイラの実装として、
>>383のようなコードを使う意味があるかどうかの話だと思うけど。
399ナイコンさん:2015/01/27(火) 04:30:16.74
> バイト単位でのPUSHは出来ないのが明らかで、

DCX SP
LXI H,0
DAD SP
MOV M,A

フツーにできるのでは?

> >>383のようなコードを使う意味があるかどうかの話だと思うけど。

・1バイトのPUSHをしたい局面では意味はあるんじゃないの?
400ナイコンさん:2015/01/27(火) 10:09:52.70
お前らわざとやってんだろ〜
401ナイコンさん:2015/01/27(火) 10:27:05.86
PUSHができてもPOPができなきゃ意味ないような…
402ナイコンさん:2015/01/27(火) 20:01:58.25
コンパイラ的には関数にパラメータ渡すだけなら、PUSH(つーか積むだけ)が実装出来ればよくて
返ってきた後は、SPを戻すのよ。
PUSH 引数2
PUSH 引数1
CALL 関数
LD HL,引数全部のバイト数
ADD HL,SP
LD SP,HL
とか
403ナイコンさん:2015/01/28(水) 23:06:16.31
>>402
TL/1のZ80はpascal呼び出しだったかもしれん。忘れた。

PUSH arg2
PUSH arg1
CALL func
次の処理
--

func:
;なんかした後
POP DE ; CALL元をDEに
LD HL,引数全部のバイト数
ADD HL,SP
LD SP,HL
EX DE,HL ; CALL元に返る
JP (HL)
404ナイコンさん:2015/01/29(木) 18:40:40.15
Z80ってSPが奇数だと読み書きにwaitが入るんだっけ?
405ナイコンさん:2015/01/29(木) 18:43:37.97
>Z80ってSPが奇数だと読み書きにwaitが入るんだっけ?

そう思った理由が知りたい
406ナイコンさん
8086は4クロック(?)追加だからねぇ。勘違いしたのかも。