Almost lost technologies

ここは昔の CPU を用いた工作記事を書くために用意しました。

Universal monitor 向け CPU判定選択

ものは今 Lチカをバラックで組もうかというところですが、とりあえずまず Electrelic さんの Universal Monitor でも。まずプロセッサ判定論理ですが、65C02判定から分岐しようかと思います。MELPS740 は未定義コードで何が起こるか規定されていないので……

まず、65C02, MELPS 740 とも無条件分岐の BRA があって、まず Universal Monitor ではそれをテストしているので、そこはそのまま。次に 65C02 系にはないアキュムレータの Bit set (SEB 1,A) を行ってアキュムレータが変わることを検知して MELPS 740 と判定する、という論理です。65C02だと SEB 1,A の位置は NOP なので、65C02ならアキュムレータは変わらないはず。

diff -aruN 6502/unimon_6502.asm MELPS740/unimon_6502.asm
--- 6502/unimon_6502.asm	2021-05-28 22:30:47.000000000 +0900
+++ MELPS740/unimon_6502.asm	2022-10-14 23:41:58.823683100 +0900
@@ -1,5 +1,5 @@
 ;;;
-;;; Universal Monitor 6502
+;;; Universal Monitor 6502+MELPS740
 ;;;   Copyright (C) 2019 Haruo Asano
 ;;;
 
@@ -54,7 +54,7 @@
 
 	;; CPU identification
 	IF USE_IDENT
-	FCB	$80,ID65C-*-2	; BRA ID65C on 65C02, NOP #xx on 6502
+	FCB	$80,ID65OR74-*-2 ; BRA ID65OR74 on 65C02, NOP #xx on 6502
 
 	SED
 	CLC
@@ -70,7 +70,18 @@
 	STA	PT0+1
 	LDA	#$00
 	JMP	IDE
-	;; 65C02
+	;; 65C02 or MELPS 740
+ID65OR74:
+	LDA	#$00
+	FCB	$2B	  ; SEB 1,A on MELPS740, NOP on 65C02's
+	AND	#$02
+	BEQ	ID65C
+	LDA	#low(IM740)
+	STA	PT0
+	LSA	#high(IM740)
+	STA	PT0+1
+	LDA	#$00
+	JMP	IDE
 ID65C:
 	FCB	$0F,$A9,IDR65C-*-3 ; BBR0 $A9,IDR65C on R65C02, NOP / LDA,#xx on 65C02
 	FCB	$8F,$A9,IDR65C-*-3 ; BBS0 $A9,IDR65C on R65C02, NOP / LDA,#xx on 65C02
@@ -1032,6 +1043,7 @@
 
 	IF USE_IDENT
 IM65:	FCB	"6502",CR,LF,$00
+IM740:	FCB	"MELPS740",CR,LF,$00
 IM65C:	FCB	"65C02",CR,LF,$00
 IMR65C:	FCB	"R65C02/W65C02",CR,LF,$00
 IM2A03:	FCB	"RP2A03",CR,LF,$00

バラック一段落したらまた状況を書きましょう。今回はこのあと基板を注文しようかと考えています。