;
; Change KEY TABLE for FM16ƒÀ,FMR
; [CTRL]+... , [GRPH]+...
;
;
	include	std.inc

ESC	equ	1Bh
DOS	equ	21h

code	segment
	assume	cs:code,ds:code

	org	80h
argc	db	?
argv	db	?

	org	100h
start:
	jmp	main
	db	'VZKEY0.02',0Dh,0Ah,1Ah
org_tbl	label	byte
	db	0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,00h,0FFh,1Eh,1Ch,0FFh
	db	0FFh,11h,17h,05h,12h,14h,19h,15h,09h,0Fh,10h,00h,1Bh,0FFh,01h,13h
	db	04h,06h,07h,08h,0Ah,0Bh,0Ch,0FFh,0FFh,1Dh,1Ah,18h,03h,16h,02h,0Eh
	db	0Dh,0FFh,0FFh,0FFh,1Fh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
	db	0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,12h,0FFh,0FFh,7Fh,0FFh,1Eh,0Bh,1Dh
size	= 	$ - offset org_tbl

org_tbl2 label	byte
	db	0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,01Eh,01Ch,0FFh
	db	0FFh,11h,17h,05h,12h,14h,19h,15h,09h,0Fh,10h,00h,1Bh,0FFh,01h,13h
	db	04h,06h,07h,08h,0Ah,0Bh,0Ch,0FFh,0FFh,1Dh,1Ah,18h,03h,16h,02h,0Eh
	db	0Dh,0FFh,0FFh,0FFh,1Fh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
	db	0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,012h,05h,0Ch,07Fh,11h,01Eh,0Bh,1Dh
;
org_tbl3 label byte
	db	0FFh,01Bh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,0FFh,01Eh,01Ch,08h
	db	09h,11h,17h,05h,12h,14h,19h,15h,09h,0Fh,10h,00h,1Bh,0Dh,01h,13h
	db	04h,06h,07h,08h,0Ah,0Bh,0Ch,0FFh,0FFh,1Dh,1Ah,18h,03h,16h,02h,0Eh
	db	0Dh,0FFh,0FFh,0FFh,1Fh,020h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
	db	0FFh,0FFh,0FFh,0FFh,0FFh,0Dh,0FFh,0FFh,012h,0FFh,0FFh,07Fh,0FFh,01Eh,0Bh,1Dh
org2_tbl1 label byte			;16ƒÀ [GRPH]+... table
	db	0FFh,ESC,0F9h,0FAh,0FBh,0FCh,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h,08Ch,08Bh,0F1h,008h
	db	009h,0FDh,0F8h,0E4h,0E5h,09Ch,09Dh,0F0h,0E8h,0E9h,08Dh,08Ah,0EDh,00Dh,095h,096h
	db	0E6h,0E7h,09Eh,09Fh,0EAh,0EBh,08Eh,089h,094h,0ECh,080h,081h,082h,083h,084h,085h
	db	086h,087h,088h,097h,0E0h,020h,098h,091h,099h,0EEh,0E1h,0E2h,0E3h,0EFh,093h,08Fh
	db	092h,0FFh,09Ah,090h,09Bh,00Dh,0FFh,0FFh,012h,005h,00Ch,07Fh,011h,01Eh,00Bh,01Dh

;
chg_tbl	label	byte
	db	0FFh,ESC,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,00h,0FFh,1Eh,1Ch,BS
	db	TAB,11h,17h,05h,12h,14h,19h,15h,09h,0Fh,10h,00h,1Bh,CR,01h,13h
	db	04h,06h,07h,08h,0Ah,0Bh,0Ch,0FFh,0FFh,1Dh,1Ah,18h,03h,16h,02h,0Eh
	db	0Dh,0FFh,0FFh,0FFh,1Fh,0FFh,'*/+-789=45'
	db	'6,123',CR,'0.',012h,'00',7Fh,0FFh,1Eh,0Bh,1Dh
;
chg_tbl2 label	byte
	db	0FFh,ESC,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,01Eh,01Ch,BS
	db	TAB,011h,017h,005h,012h,014h,019h,015h,009h,00Fh,010h,000h,01Bh,CR,001h,013h
	db	04h,06h,07h,08h,0Ah,0Bh,0Ch,0FFh,0FFh,1Dh,1Ah,18h,03h,16h,02h,0Eh
	db	00Dh,0FFh,0FFh,0FFh,01Fh,0FFh,'*/+-789=45'
	db	'6,123',CR,'0.',12h,05h,0Ch,7Fh,11h,1Eh,0Bh,1Dh
;
;msg_original	db	'VZ key table --> ORIGINAL key table',CR,LF,'$'
msg_change	db	'ORIGINAL key table --> VZ key table',CR,LF,'$'
msg_notfound	db	'Not found key table!!',CR,LF,'$'
;
main:
	cld
	clr	ax
	mov	es,ax
	mov	cx,size/2
	mov	si,offset org_tbl
	mov	bx,offset chg_tbl
	call	search1
_ifn z
	mov	si,offset org_tbl2
	mov	bx,offset chg_tbl2
	call	search1
  _if z
  	mov	cx,size/2
  	mov	si,offset org2_tbl1
  	mov	bx,offset chg_tbl2
  	call	search1
  _else
  	mov	si,offset org_tbl3		;MS-DOS V3.1 L31A
  	mov	bx,offset chg_tbl
  	call	search1
    _ifn z
  	mov	dx,offset msg_notfound
  	mov	al,1
    _endif
  _endif
_endif
	mov	ah,9
	int	DOS
	mov	ah,4Ch
	int	DOS

search1:
	call	search_keytbl
	mov	dx,offset msg_change
;_ifn z
;	xchg	si,bx
;	mov	dx,offset msg_original
;	call	search_keytbl
;_endif
	ret

;--- Search key table & changed DATA ---
;--> ES:DI  search area
;--> DS:SI  search data
;--> BX     change data offset
;--> CX     size
;<-- NZ     not found
search_keytbl proc
	mov	di,400h
_repeat
	add	di,10h
	cmp	di,0F000h
	ja	search_exit
	push	si
	push	di
	push	cx
   repz cmpsw
	pop	cx
	pop	di
	pop	si
_while nz
	mov	si,bx
    rep movsw
search_exit:
	ret
search_keytbl endp

code	ends

	end	start
