| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673 | 
#------------------------------------------------------------------------------# $File: c64,v 1.16 2024/03/07 22:30:21 christos Exp $# c64:  file(1) magic for various commodore 64 related files## From: Dirk Jagdmann <doj@cubic.org>0x16500	belong		0x12014100	D64 Image0x16500	belong		0x12014180	D71 Image0x61800 belong		0x28034400	D81 Image0	belong		0x43154164	X64 Image# C64 (and other CBM) cartridges# Extended by David Korth <gerbilsoft@gerbilsoft.com># Update:	Joerg Jenderek# Reference: https://vice-emu.sourceforge.io/vice_17.html#SEC391#		http://ist.uwaterloo.ca/~schepers/formats/CRT.TTX#		http://mark0.net/download/triddefs_xml.7z/defs/c/crt-c64.trid.xml# Note:		called "C64 Cartridge image" by TrID and#		"CRT C64 Cartridge Image Format" by DROID via PUID fmt/8220	string		C64\40CARTRIDGE# skip DROID fmt-822-signature-id-1179.crt with missing packet length>0x44	ubelong		>0x10>>0	use		c64-crt#	display Commodore 64 cartridge information0	name		c64-crt>0	string		x		Commodore 64 cartridge#!:mime	application/octet-stream!:mime	application/x-commodore-crt!:ext	crt#		http://mark0.net/download/triddefs_xml.7z/defs/c/car-ccs64.trid.xml#!:ext	crt/car>0x20	ubyte	0	\b,>0x20	ubyte	!0# 32-byte null padded cartridge name like: "BUGS BUNNY" "CART64" "EasyFlash" "FINAL CARTRIDGE" "Magic Desk" "VICE CART">>0x20	string/T	x	\b: "%.32s",# cartridge hardware type>0x16	beshort	0# cartridge port EXROM line status>>0x18	beshort	0x0000	16 KB game>>0x18	beshort	0x0001	8 KB game>>0x18	beshort	0x0100	UltiMax mode>>0x18	beshort	0x0101	RAM/disabled>0x16	beshort	1	Action Replay>0x16	beshort	2	KCS Power Cartridge>0x16	beshort	3	Final Cartridge III>0x16	beshort	4	Simons' BASIC>0x16	beshort	5	Ocean type 1>0x16	beshort	6	Expert Cartridge>0x16	beshort	7	Fun Play, Power Play>0x16	beshort	8	Super Games>0x16	beshort	9	Atomic Power>0x16	beshort	10	Epyx Fastload>0x16	beshort	11	Westermann Learning>0x16	beshort	12	Rex Utility>0x16	beshort	13	Final Cartridge I>0x16	beshort	14	Magic Formel>0x16	beshort	15	C64 Game System, System 3>0x16	beshort	16	Warp Speed>0x16	beshort	17	Dinamic>0x16	beshort	18	Zaxxon / Super Zaxxon (Sega)>0x16	beshort	19	Magic Desk, Domark, HES Australia>0x16	beshort	20	Super Snapshot V5>0x16	beshort	21	Comal-80>0x16	beshort	22	Structured BASIC>0x16	beshort	23	Ross>0x16	beshort	24	Dela EP64>0x16	beshort	25	Dela EP7x8>0x16	beshort	26	Dela EP256>0x16	beshort	27	Rex EP256>0x16	beshort	28	Mikro Assembler>0x16	beshort	29	Final Cartridge Plus>0x16	beshort	30	Action Replay 4>0x16	beshort	31	Stardos>0x16	beshort	32	EasyFlash>0x16	beshort	33	EasyFlash Xbank>0x16	beshort	34	Capture>0x16	beshort	35	Action Replay 3>0x16	beshort	36# cartridge Hardware Revision/Subtype (usually 0) (added in v1.01)>>0x1A	ubyte	1	Nordic Replay>>0x1A	ubyte	!1	Retro Replay>0x16	beshort	37	MMC64>0x16	beshort	38	MMC Replay>0x16	beshort	39	IDE64>0x16	beshort	40	Super Snapshot V4>0x16	beshort	41	IEEE-488>0x16	beshort	42	Game Killer>0x16	beshort	43	Prophet64>0x16	beshort	44	EXOS>0x16	beshort	45	Freeze Frame>0x16	beshort	46	Freeze Machine>0x16	beshort	47	Snapshot64>0x16	beshort	48	Super Explode V5.0>0x16	beshort	49	Magic Voice>0x16	beshort	50	Action Replay 2>0x16	beshort	51	MACH 5>0x16	beshort	52	Diashow-Maker>0x16	beshort	53	Pagefox>0x16	beshort	54	Kingsoft>0x16	beshort	55	Silverrock 128K Cartridge>0x16	beshort	56	Formel 64>0x16	beshort	57>>0x1A	ubyte	1	Hucky>>0x1A	ubyte	!1	RGCD>0x16	beshort	58	RR-Net MK3>0x16	beshort	59	EasyCalc>0x16	beshort	60	GMod2>0x16	beshort	61	MAX Basic>0x16	beshort	62	GMod3>0x16	beshort	63	ZIPP-CODE 48>0x16	beshort	64	Blackbox V8>0x16	beshort	65	Blackbox V3>0x16	beshort	66	Blackbox V4>0x16	beshort	67	REX RAM-Floppy>0x16	beshort	68	BIS-Plus>0x16	beshort	69	SD-BOX>0x16	beshort	70	MultiMAX>0x16	beshort	71	Blackbox V9>0x16	beshort	72	Lt. Kernal Host Adaptor>0x16	beshort	73	RAMLink>0x16	beshort	74	H.E.R.O.>0x16	beshort	75	IEEE Flash! 64>0x16	beshort	76	Turtle Graphics II>0x16	beshort	77	Freeze Frame MK2>0x16	beshort	78	Partner 64# cartridge hardware type: (0-78)>0x16	ubeshort >78	unknown type %#x# Cartridge Hardware Revision/Subtype (usually 0 added in v1.01)>>0x1A	ubyte	>0	revision %#x# padded with 3 space characters for CRT but for CCS64 Cartridge (*.CAR) maybe different according to TrID>14	ubeshort	!0x2020	\b, at 14 %#x# file header length like: 20h (reported wrong) 40h (default and minimum)>0x10	ubelong	!0x40	\b, header length %#x# cartridge version like: 1.0 1.1 (adds CRT sub type/hardware revision) 2.0 (introduces VIC20, PLUS4, C128, CBM2)>0x14	ubeshort	!0x0100>>0x14	ubyte		x	\b, version %u>>0x15	ubyte		x	\b.%u# cartridge content start with ROM signature which must be CHIP>0x40	ubelong	!0x43484950	\b, invalid ROM signature>>0x40	string	x		"%0.4s"# total packet length (length of ROM image size and header combined) like: 2010h 4010h>0x44	ubelong	x	\b, packet length %#x0	string		C128\40CARTRIDGE	Commodore 128 cartridge>0x20	ubyte	0	\b,>0x20	ubyte	!0>>0x20	string/T	x	\b: "%.32s",>0x16	beshort	0	generic cartridge>0x16	beshort	1	Warpspeed128>>0x1A	ubyte	1	\b, REU support>>0x1A	ubyte	2	\b, REU support, with I/O and ROM banking0	string		CBM2\40CARTRIDGE	Commodore CBM-II cartridge>0x20	ubyte	!0>>0x20	string/T	x	\b: "%.32s"0	string		VIC20\40CARTRIDGE	Commodore VIC-20 cartridge>0x20	ubyte	0	\b,>0x20	ubyte	!0>>0x20	string/T	x	\b: "%.32s",>0x16	beshort	0	generic cartridge>0x16	beshort	1	Mega-Cart>0x16	beshort	2	Behr Bonz>0x16	beshort	3	Vic Flash Plugin>0x16	beshort	4	UltiMem>0x16	beshort	5	Final Expansion0	string		PLUS4\40CARTRIDGE	Commodore 16/Plus4 cartridge>0x20	ubyte	!0>>0x20	string/T	x	\b: "%.32s"# DreamLoad archives see:# https://www.lemon64.com/forum/viewtopic.php?t=37415\# &sid=494dc2ca91289e05dadf80a7f8a968fe (at the bottom).# https://www.c64-wiki.com/wiki/DreamLoad.# Example HVSC Commodore 64 music collection:# https://kohina.duckdns.org/HVSC/C64Music/10_Years_HVSC.dfi0	byte	0>1	string	DREAMLOAD\40FILE\40ARCHIVE>>0x17	byte	0	DFI Image>>>0x1a	leshort	x	version: %d.>>>0x18	leshort	x	\b%d>>>0x1c	lelong	x	tracks: %d0	string		GCR-1541	GCR Image>8	byte		x		version: %i>9	byte		x		tracks: %i9	string		PSUR		ARC archive (c64)2	string		-LH1-		LHA archive (c64)0	string		C64File		PC64 Emulator file>8	string		>\0		"%s"0	string		C64Image	PC64 Freezer Image0	beshort		0x38CD		C64 PCLink Image0	string		CBM\144\0\0	Power 64 C64 Emulator Snapshot0	belong		0xFF424CFF	WRAptor packer (c64)# URL:		http://fileformats.archiveteam.org/wiki/T64# Reference:	http://ist.uwaterloo.ca/~schepers/formats/T64.TXT#		https://vice-emu.sourceforge.io/vice_16.html#SEC394#		https://www.infinite-loop.at/Power64/Documentation/Power64-ReadMe/AE-File_Formats.html#		http://mark0.net/download/triddefs_xml.7z/defs/e/emu-t64.trid.xml# Note:		called "Commodore 64 Tape container" by TrID, "T64 Tape Image Format" by DROID via PUID fmt/820 and# 		"T64 tape Image" by ./c64,v 1.14#		verified by command like `deark -m t64 -l -d2 Caitan_the_Demo.t64` and#		`cbmconvert -v2 -t -D4 ironmanoffroad.d64 ironmanoffroad.t64`# 32 byte signature starting like C64S\x20tape\x20file# C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0# C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x00	string/b	C64# skip raw Commodore TAPe by check for unsed areas (\0 filled) and valid low (40h+m*20h; m=0-FFffh) offset >0x46	ubequad&0xFFff1F00C0ffFFff	0	Commodore Tape image#!:mime	application/octet-stream#!:mime	application/x-commodore-tape!:ext	t64# version like: 0100h (examples found) 0101h 0200h (no examples)>>32	leshort		x		Version:%#x#>>32	leshort		!0x0100		Version:%#x# number of used directory entries like: 0 1 2 5>>36	leshort		!0		Entries:%i# tape container name, 24 characters (padded with 20h but with A0h for DirMaster created samples) like:# ->ZYRON'S PD<- IMAGETAPE MY-T64-TEST\240\240\240 OPERATIONWOLF+3-711.T64>>40	string/24/Tb	>\040		Name:%.24s# MaxFiles; maximal directory entries like: 0 1 2 5 30 (=1Eh some emulators expect exactly this value) 31 32>>34	uleshort	x		MaxFiles:%u# 1st C64 filetype: 0~free 1~normal tape file 2~tape file with header 3~memory snapshot 4~tape block 5~digitized stream 6-255~reserved>>0x40	ubyte		!1		\b, C64 file type %#x# 1st start address or load address of first entry like: 0000 (empty|snapshot) 04a0h (ironmanoffroad.t64) 0801h (typically) 1201h (3501_quizmaster_program_s1.t64)>>0x42	uleshort	!0x0801		\b, load address %#4.4x# 1st actual end address in memory>>0x44	uleshort	x		\b, end address %#4.4x# reserved; must be 0>>0x26	ubeshort	!0		\b, at +0x26 %#x# not used like: 0 (examples found and according to TrID)>>0x46	ubeshort	!0		\b, at 0x46 %#4.4x# not used like: 0 (examples found and according to TrID)>>0x4c	ubelong		!0		\b, at 0x4C %#8.8x# offset (=64+32*m) into 1st container file like: 0 (empty) 60h 80h E0h 400h 440h ...>>0x48	ulelong		>0		\b, at %#x# 1st filename (in PETASCII, padded with 20h, not A0h) like: "DRILLINSTR. /HTL" "WIZBALL+        " ...>>>0x50	string/16/bT	x		"%0.16s"# https://www.lyonlabs.org/commodore/onrequest/Inside_Commodore_Dos.pdf# file type like: 0~Scratched 1~SEQunclosed 81h~SEQ 82h~PRG C2h~PRGlocked ...>>>0x41	ubyte		x>>>>0x41	ubyte	=0x00		Scratched type>>>>0x41	ubyte	=0x01		SEQ unclosed type#>>>>0x41	ubyte	=0x44		foo type>>>>0x41	ubyte	=0x80		DEL type>>>>0x41	ubyte	=0x81		SEQ type>>>>0x41	ubyte	=0x82		PRG type>>>>0x41	ubyte	=0x83		USR type>>>>0x41	ubyte	=0x84		REL type>>>>0x41	ubyte	=0xC2		PRG locked type# other 	unusual file type>>>>0x41	default	x>>>>>0x41	ubyte	x		%#2.2x type# inspect 1st entry content (often Commodore C64 BASIC program *.PRG) without load adress#>>(0x48.l)	ubequad		x	\b, 1st data %16.16llx...# Raw tape file format (.tap files)# Esa Hyyti <esa@netlab.tkk.fi># Update:	Joerg Jenderek# URL:		http://fileformats.archiveteam.org/wiki/Tap_file#		https://vice-emu.sourceforge.io/vice_16.html#SEC392# Reference:	http://ist.uwaterloo.ca/~schepers/formats/TAP.TXT# Note:		called "TAP (Commodore 64)" by DROID via PUID fmt/802#		a variant starting with C16-TAPE-RAW should exist, but no examples found0	string/b	C64-TAPE-RAW	Commodore raw Tape image (platform#0	string		C64-TAPE-RAW	C64 Raw Tape File (.tap),#!:mime	application/octet-stream!:mime	application/x-commodore-tape!:ext	tap# According to TrID als raw suffix, but no such samples found#!:ext	tap/raw# computer platform like: 0~C64 1~VIC-20 2~C16 Plus/4 3~PET 4~C5x0 5~C6x0 C7x0>0xD	ubyte		0		C64>0xD	ubyte		1		VIC-20>0xD	ubyte		2		C16 Plus/4>0xD	ubyte		3		PET>0xD	ubyte		4		C5x0>0xD	ubyte		5		C6x0 C7x0# this should not happen!>0xD	ubyte		>5		%#2.2x>0xD	ubyte		x		\b),# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/t/tap.trid.xml#		http://mark0.net/download/triddefs_xml.7z/defs/t/tap-1.trid.xml# Note:		called "C64 Tape image format" (v0-original) (v1-updated)" by TrID# TAP version like: 0~OriginalLayout 1~Updated (often)>0x0c	byte		x		Version:%u,# file data size (not including header)>0x10	lelong		x		Length:%u cycles# video standard like: 0~PAL 1~NTSC 2~OLD NTSC 3~PALN>0xE	ubyte		x    		\b, video>0xE	ubyte		0		PAL>0xE	ubyte		1		NTSC>0xE	ubyte		2		old NTSC>0xE	ubyte		3		PALN# this should not happen!>0xE	ubyte		>3		%#2.2x# reserved for future expansion like: 0>0xF	ubyte		!0		\b, at 0xF %#2.2x# file data#>014	ubequad		x		\b, data %16.16llx# magic for Goattracker2, http://covertbitops.c64.org/# from Alex Myczko <alex@aiei.ch>0	string		GTS5		GoatTracker 2 song>4	string		>\0		\b, "%s">36	string		>\0		\b by %s>68	string		>\0		\b (C) %s>100	byte		>0		\b, %u subsong(s)# CBM BASIC (cc65 compiled)# Summary:	binary executable or Basic program for Commodore C64 computers# Update:	Joerg Jenderek# URL:		http://fileformats.archiveteam.org/wiki/Commodore_BASIC_tokenized_file# Reference:	https://www.c64-wiki.com/wiki/BASIC_token#		https://github.com/thezerobit/bastext/blob/master/bastext.doc#		http://mark0.net/download/triddefs_xml.7z/defs/p/prg-c64.trid.xml# TODO:		unify Commodore BASIC/program sub routines# Note:		"PUCrunch archive data" moved from ./archive and merged with c64-exe0	leshort		0x0801# display Commodore C64 BASIC program (strength=50) after "Lynx archive" (strength=330) handled by ./archive#!:strength +0# if first token is not SYS this implies BASIC program in most cases>6		ubyte		!0x9e# but sELF-ExTRACTING-zIP executable unzp6420.prg contains SYS token at end of second BASIC line (at 0x35)>>23		search/30	\323ELF-E\330TRACTING-\332IP>>>0		use		c64-exe>>23		default		x>>>0		use		c64-prg# if first token is SYS this implies binary executable>6		ubyte		=0x9e>>0		use		c64-exe# display information about C64 binary executable (memory address, line number, token)0	name	c64-exe>0		uleshort	x	Commodore C64# http://a1bert.kapsi.fi/Dev/pucrunch/# start address 0801h; next offset 080bh; BASIC line number is 239=00EFh; BASIC instruction is SYS 2061# the above combination appartly also occur for other Commodore programs like: gunzip111.c64.prg# and there exist PUCrunch archive for other machines like C16 with other magics>0		string	\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31	program, probably PUCrunch archive data!:mime	application/x-compress-pucrunch!:ext	prg/pck>0		string	!\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31	program!:mime	application/x-commodore-exec!:ext	prg/# start address like: 801h>0		uleshort	!0x0801	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x800)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# valid 2nd BASIC fragment found only in sELF-ExTRACTING-zIP executable unzp6420.prg>>23		search/30	\323ELF-E\330TRACTING-\332IP# jump again from beginning>>>(2.s-0x800)	ubyte		x>>>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about tokenized C64 BASIC program (memory address, line number, token)0	name	c64-prg>0		uleshort	x	Commodore C64 BASIC program!:mime	application/x-commodore-basic# Tokenized BASIC programs were stored by Commodore as file type program "PRG" in separate field in directory structures.# So file name can have no suffix like in saveroms; When transferring to other platforms, they are often saved with .prg extensions.# BAS suffix is typically used for the BASIC source but also found in program pods.bas!:ext	prg/bas/# start address like: 801h>0		uleshort	!0x0801	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x0800)	ubyte		x	>>&-1		ubyte		!0	\b, no EOL=%#x# 2nd BASIC fragment>>&0		use		basic-line# zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# Summary:	binary executable or Basic program for Commodore C128 computers# URL:		https://en.wikipedia.org/wiki/Commodore_128# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/prg-c128.trid.xml# From:		Joerg Jenderek# Note:		Commodore 128 BASIC 7.0 variant; there exist varaints with different start addresses0		leshort		0x1C01!:strength	+1# GRR: line above with strength 51 (50+1) is too generic because it matches SVr3 curses screen image, big-endian with strength (50) handled by ./terminfo# probably skip SVr3 curses images with "invalid high" second line offset >2		uleshort	<0x1D02# skip foo with "invalid low" second line offset>>2		uleshort	>0x1C06# if first token is not SYS this implies BASIC program>>>6		ubyte		!0x9e>>>>0			use	c128-prg# if first token is SYS this implies binary executable>>>6		ubyte		=0x9e>>>>0		use		c128-exe# Summary:	binary executable or Basic program for Commodore C128 computers# Note:		Commodore 128 BASIC 7.1 extension by Rick Simon# start adress 132Dh#0		leshort		0x132D	THIS_IS_C128_7.1#>0			use	c128-prg# Summary:	binary executable or Basic program for Commodore C128 computers# Note:		Commodore 128 BASIC 7.0 saved with graphics mode enabled# start adress 4001h#0		leshort		0x4001	THIS_IS_C128_GRAPHIC#>0			use	c128-prg# display information about tokenized C128 BASIC program (memory address, line number, token)0	name	c128-prg>0		uleshort	x	Commodore C128 BASIC program!:mime	application/x-commodore-basic!:ext	prg# start address like: 1C01h>0		uleshort	!0x1C01	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x1C00)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# 2nd BASIC fragment>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about C128 program (memory address, line number, token)0	name	c128-exe>0		uleshort	x	Commodore C128 program!:mime	application/x-commodore-exec!:ext	prg/# start address like: 1C01h>0		uleshort	!0x1C01	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x1C00)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# no valid 2nd BASIC fragment in Commodore executables#>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# Summary:	binary executable or Basic program for Commodore C16/VIC-20/Plus4 computers# URL:		https://en.wikipedia.org/wiki/Commodore_Plus/4# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/prg-vic20.trid.xml#		defs/p/prg-plus4.trid.xml# From:		Joerg Jenderek# Note:		there exist VIC-20 variants with different start address# GRR: line below is too generic because it matches Novell LANalyzer capture# with regular trace header record handled by ./sniffer0		leshort		0x1001# skip regular Novell LANalyzer capture (novell-2.tr1 novell-lanalyzer.tr1 novell-win10.tr1) with "invalid low" token value 54h>6		ubyte		>0x7F# skip regular Novell LANalyzer capture (novell-2.tr1 novell-lanalyzer.tr1 novell-win10.tr1) with "invalid low" second line offset 4Ch#>>2		uleshort	>0x1006	OFFSET_NOT_TOO_LOW# skip foo with "invalid high" second line offset but not for 0x123b (Minefield.prg)#>>>2		uleshort	<0x1102	OFFSET_NOT_TOO_HIGH# if first token is not SYS this implies BASIC program>>6		ubyte		!0x9e# valid second end of line separator implies BASIC program>>>(2.s-0x1000)		ubyte	=0>>>>0			use	c16-prg# invalid second end of line separator !=0 implies binary executable like: Minefield.prg>>>(2.s-0x1000)		ubyte	!0>>>>0			use	c16-exe# if first token is SYS this implies binary executable>>6		ubyte		=0x9e>>>0		use		c16-exe# display information about C16 program (memory address, line number, token)0	name	c16-exe>0		uleshort	x	Commodore C16/VIC-20/Plus4 program!:mime	application/x-commodore-exec!:ext	prg/# start address like: 1001h>0		uleshort	!0x1001	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x1000)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# no valid 2nd BASIC fragment in excutables#>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about tokenized C16 BASIC program (memory address, line number, token)0	name	c16-prg>0		uleshort	x	Commodore C16/VIC-20/Plus4 BASIC program!:mime	application/x-commodore-basic!:ext	prg# start address like: 1001h>0		uleshort	!0x1001	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x1000)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# 2nd BASIC fragment>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# Summary:	binary executable or Basic program for Commodore VIC-20 computer with 8K RAM expansion# URL:		https://en.wikipedia.org/wiki/VIC-20# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/prg-vic20-8k.trid.xml# From:		Joerg Jenderek# Note:		Basic v2.0 with Basic v4.0 extension (VIC20); there exist VIC-20 variants with different start addresses# start adress 1201h0		leshort		0x1201# if first token is not SYS this implies BASIC program>6		ubyte		!0x9e>>0		use		vic-prg# if first token is SYS this implies binary executable>6		ubyte		=0x9e>>0		use		vic-exe# display information about Commodore VIC-20 BASIC+8K program (memory address, line number, token)0	name	vic-prg>0		uleshort	x	Commodore VIC-20 +8K BASIC program!:mime	application/x-commodore-basic!:ext	prg# start address like: 1201h>0		uleshort	!0x1201	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x1200)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# 2nd BASIC fragment>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about Commodore VIC-20 +8K program (memory address, line number, token)0	name	vic-exe>0		uleshort	x	Commodore VIC-20 +8K program!:mime	application/x-commodore-exec!:ext	prg/# start address like: 1201h>0		uleshort	!0x1201	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x0400)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# no valid 2nd BASIC fragment in excutables#>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# Summary:	binary executable or Basic program for Commodore PET computers# URL:		https://en.wikipedia.org/wiki/Commodore_PET# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/prg-pet.trid.xml# From:		Joerg Jenderek# start adress 0401h0		leshort		0x0401!:strength	+1# GRR: line above with strength 51 (50+1) is too generic because it matches TTComp archive data, ASCII, 1K dictionary# (strength=48=50-2) handled by ./archive and shared library (strength=50) handled by ./ibm6000# skip TTComp archive data, ASCII, 1K dictionary ttcomp-ascii-1k.bin with "invalid high" second line offset 4162h>2		uleshort	<0x0502# skip foo with "invalid low" second line offset#>>2		uleshort	>0x0406	OFFSET_NOT_TOO_LOW# skip bar with "invalid end of line" #>>>(2.s-0x0400)	ubyte		=0	END_OF_LINE_OK# if first token is not SYS this implies BASIC program>>6		ubyte		!0x9e>>>0		use		pet-prg# if first token is SYS this implies binary executable>>6		ubyte		=0x9e>>>0		use		pet-exe# display information about Commodore PET BASIC program (memory address, line number, token)0	name	pet-prg>0		uleshort	x	Commodore PET BASIC program!:mime	application/x-commodore-basic!:ext	prg# start address like: 0401h>0		uleshort	!0x0401	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x0400)	ubyte		x# 2nd BASIC fragment>>&0		use		basic-line# zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about Commodore PET program (memory address, line number, token)0	name	pet-exe>0		uleshort	x	Commodore PET program!:mime	application/x-commodore-exec!:ext	prg/# start address like: 0401h>0		uleshort	!0x0401	\b, start address %#4.4x# 1st BASIC fragment>2		use		basic-line# jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line>(2.s-0x0400)	ubyte		x>>&-1		ubyte		!0	\b, no EOL=%#x# no valid 2nd BASIC fragment in excutables#>>&0		use		basic-line# Zero-byte marking the end of the BASIC line>-3		ubyte		!0	\b, 3 last bytes %#2.2x# Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program>>-2		ubeshort	x	\b%4.4x# display information about tokenized BASIC line (memory address, line number, Token)0	name	basic-line# pointer to memory address of beginning of "next" BASIC line# greater then previous offset but maximal 100h difference>0		uleshort	x	\b, offset %#4.4x# offset 0x0000 indicates the end of BASIC program; so bytes afterwards may be some other data>0		uleshort	0# not line number but first 2 data bytes >>2		ubeshort	x	\b, data %#4.4x# not token but next 2 data bytes >>4		ubeshort	x	\b%4.4x# not token arguments but next data bytes >>6		ubequad		x 	\b%16.16llx>>14		ubequad		x 	\b%16.16llx...# like 0x0d20352020204c594e5820495820204259205749 "\r 5   LYNX IX  BY WILL CORLEY" for LyNX archive Darkon.lnx handled by ./archive#>>3		string		x 	"%-0.30s">0		uleshort	>0# BASIC line number with range from 0 to 65520; practice to increment numbers by some value (5, 10 or 100)>>2		uleshort	x	\b, line %u# https://www.c64-wiki.com/wiki/BASIC_token# The "high-bit" bytes from #128-#254 stood for the various BASIC commands and mathematical operators>>4		ubyte		x	\b, token (%#x)# https://www.c64-wiki.com/wiki/REM>>4		string		\x8f	REM# remark string like: ** SYNTHESIZER BY RICOCHET **>>>5		string		>\0	%s#>>>>&1		uleshort	x	\b, NEXT OFFSET %#4.4x# https://www.c64-wiki.com/wiki/PRINT>>4		string		\x99	PRINT# string like: "Hello world" "\021 \323ELF-E\330TRACTING-\332IP (64 ONLY)\016\231":\2362141>>>5		string		x	%s#>>>>&0		ubequad		x	AFTER_PRINT=%#16.16llx# https://www.c64-wiki.com/wiki/POKE>>4		string		\x97	POKE# <Memory address>,<number>>>>5		regex		\^[0-9,\040]+	%s# BASIC command delimiter colon (:=3Ah)>>>>&-2		ubyte		=0x3A# after BASIC command delimiter colon remaining (<255) other tokenized BASIC commands>>>>>&0		string		x		"%s"# https://www.c64-wiki.com/wiki/SYS	0x9e=\236>>4		string		\x9e	SYS# SYS <Address> parameter is a 16-bit unsigned integer; in the range 0 - 65535>>>5		regex		\^[0-9]{1,5}	%s# maybe followed by spaces, "control-characters" or colon (:) followed by next commnds or in victracker.prg# (\302(43)\252256\254\302(44)\25236) /T.L.R/#>>>5		string		x	SYS_STRING="%s"# https://www.c64-wiki.com/wiki/GOSUB>>4		string		\x8d	GOSUB# <line>>>>5		string		>\0	%s
 |