549 lines
21 KiB
Text
549 lines
21 KiB
Text
|
|
#------------------------------------------------------------------------------
|
|
# $File: c64,v 1.14 2023/06/16 19:24:06 christos Exp $
|
|
# c64: file(1) magic for various commodore 64 related files
|
|
#
|
|
# From: Dirk Jagdmann <doj@cubic.org>
|
|
|
|
0x16500 belong 0x12014100 D64 Image
|
|
0x16500 belong 0x12014180 D71 Image
|
|
0x61800 belong 0x28034400 D81 Image
|
|
0 belong 0x43154164 X64 Image
|
|
|
|
# C64 (and other CBM) cartridges
|
|
# Extended by David Korth <gerbilsoft@gerbilsoft.com>
|
|
# Reference: https://vice-emu.sourceforge.io/vice_17.html#SEC391
|
|
|
|
0 string C64\40CARTRIDGE Commodore 64 cartridge
|
|
>0x20 ubyte 0 \b,
|
|
>0x20 ubyte !0
|
|
>>0x20 string/T x \b: "%.32s",
|
|
>0x16 beshort 0
|
|
>>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
|
|
>>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
|
|
|
|
0 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 banking
|
|
|
|
0 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 Expansion
|
|
|
|
0 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.dfi
|
|
|
|
0 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: %d
|
|
|
|
0 string GCR-1541 GCR Image
|
|
>8 byte x version: %i
|
|
>9 byte x tracks: %i
|
|
|
|
9 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 Image
|
|
|
|
0 beshort 0x38CD C64 PCLink Image
|
|
0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot
|
|
|
|
0 belong 0xFF424CFF WRAptor packer (c64)
|
|
|
|
0 string C64S\x20tape\x20file T64 tape Image
|
|
>32 leshort x Version:%#x
|
|
>36 leshort !0 Entries:%i
|
|
>40 string x Name:%.24s
|
|
|
|
0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
|
|
>32 leshort x Version:%#x
|
|
>36 leshort !0 Entries:%i
|
|
>40 string x Name:%.24s
|
|
|
|
0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
|
|
>32 leshort x Version:%#x
|
|
>36 leshort !0 Entries:%i
|
|
>40 string x Name:%.24s
|
|
|
|
# Raw tape file format (.tap files)
|
|
# Esa Hyyti <esa@netlab.tkk.fi>
|
|
0 string C64-TAPE-RAW C64 Raw Tape File (.tap),
|
|
>0x0c byte x Version:%u,
|
|
>0x10 lelong x Length:%u cycles
|
|
|
|
# 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-exe
|
|
0 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 addresses
|
|
0 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 ./sniffer
|
|
0 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 1201h
|
|
0 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 0401h
|
|
0 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
|