123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- #------------------------------------------------------------------------------
- # $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
|