Skip to content

sidchoudhuri/assembly64_cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

assembly64_cli

A command-line C64 scene lookup tool for the 1541 Ultimate II/II+L, Ultimate64/Ultimate64 Elite II, & Commodore 64 Ultimate powered by the Assembly64 API & the Ultimate 64 API.

Features

  • Full Assembly64 API search with AQL query builder
  • Zero dependencies
  • Multi-device management
  • Run anything from the local or U64 file system or directly from a scene repository
  • Full Ultimate64 file system management with upload/download, folder management
  • Local filesystem browser
  • Multi-disk auto-flip
  • SID player integration
  • Charts, presets, categories
  • Favorites system — save items from any search result and browse by category
  • Config system with dirs and devices

Please send any feature requests or report any issues here

Setup

Precompiled binaries for Linux, Mac. and Windows now available. Python not required.

Script execution requires Python 3. No dependencies beyond the standard library.

git clone https://github.com/yourusername/assembly64.git
cd assembly64
chmod +x assembly64.py

Optionally add the executable or script to your PATH:

cp assembly64.py ~/.local/bin/assembly64.py

Usage

$ ./assembly64.py --help

ASSEMBLY64 CLI - C64 Scene Lookup Tool
APIS: hackerswithstyle.se/leet/
github.com/GideonZ/1541u-documentation

COMMANDS
  search [query]   Search releases
  sid <query>      Search HVSC SIDs
  charts [type]    Top charts by type (demos/music/games/graphics/tools/onefiledemos)
  presets          Browse AQL presets
  cats             Browse categories
  ls/remote [path] Browse Ultimate files
  push/put <file>  Upload to Ultimate
  pull/get <path>  Download
  run <path>       Run local file/dir
  rrun <path>      Run file on Ultimate
  mount <file>     Mount local disk
  rmount <path>    Mount remote disk
  mkdir <path>     Create directory
  rename <old> <new>  Rename
  delete <path>    Delete file/dir
  reset            Reset the C64
  reboot           Reboot the C64
  device/devices   List devices
  config           Show/set config
  favorites/fav    Browse saved favorites
  help / --help / -h  Show this help

SEARCH FLAGS
  --group  --handle  --repo  --cat
  --date / --after / --before
  --order asc|desc  --limit N
  --download  --run IP  --autodisk

FILE TYPES
  .prg .crt   DMA load and run
  .sid        SID player
  .d64 .d71 .d81 .g64 .g71
              Mount, reset, autorun

MULTI-DISK AUTO-FLIP
  Enter=flip now  q+Enter=stop

LS/REMOTE BROWSER KEYS
  number    select / descend
  u / ^     go up a level
  b / <-    prev page
  n / ->    next page
  m         make directory
  r         rename
  d         delete
  q         quit

LS TIPS
  ls              start at / or default
  ls USB1/DEMOS   start at specific path
  ls U64EII       use named device
  config --set-ls-path USB1  set default

CONFIG FLAGS
  --set-ip IP      Set active IP
  --set-demos-dir  Set demos dir
  --set-sids-dir   Set SIDs dir
  --set-ls-path    Set default ls path
  --add NAME IP    Add a device
  --remove NAME    Remove a device
  --set NAME       Set active device
  --next           Cycle to next device

FAVORITES FLAGS
  --list           Flat list of all favorites
  --remove ID      Remove favorite by item ID
  --demos          Show demos favorites only
  --music          Show music favorites only
  --games          Show games favorites only
  (etc. for any category name)


EXAMPLES
  assembly64 search "edge of disgrace"
  assembly64 search --group fairlight
  assembly64 search --handle laxity
  assembly64 sid sanxion
  assembly64 charts
  assembly64 charts demos
  assembly64 ls
  assembly64 ls USB1/DEMOS
  assembly64 ls U64EII
  assembly64 remote
  assembly64 push game.d64
  assembly64 run mygame.d64
  assembly64 rrun SD/_BASIC/Tetris.d64
  assembly64 reset
  assembly64 device
  assembly64 config
  assembly64 config --set-ip 192.168.2.32
  assembly64 config --set-demos-dir ~/demos
  assembly64 config --set-sids-dir ~/sids
  assembly64 config --set-ls-path USB1
  assembly64 config --add U64 192.168.2.32
  assembly64 config --add U2L 192.168.2.33
  assembly64 config --set U2L
  assembly64 config --next
  assembly64 config --remove U2L
  assembly64 favorites
  assembly64 favorites --list
  assembly64 favorites --music
  assembly64 favorites --demos
  assembly64 favorites --remove 12345
$

Examples

Looking up the first 50 demos from CSDB by Fairlight in descending order (newest first)

$ ./assembly64.py search --group fairlight --cat demos --order desc
  50 result(s):

    1. Qdor Qdor  [Fairlight  2026-02-13  1 (demos)]
    2. The Hat  [Fairlight,Genesis Project  2026-02-01  1 (demos)]
    3. Crazy People  [Fairlight  1991-11-01  1 (demos)]
    4. Good Wheel 2025  [Fairlight  2025-01-01  37]
    5. Good Wheel 2025  [Fairlight  2025-12-24  1 (demos)]
    6. A Fayre Glow  [Fairlight  2025-01-01  37]
    7. Soya 50yo  [Fairlight  2025-01-01  37]
    8. The Safety Dudes  [Fairlight  2025-01-01  37]
    9. Fjälldata 2026 Invite  [Genesis Project,Fairlight  2025-01-01  37]
   10. CashesCash#1  [Fairlight,Triad  2025-01-01  37]
   11. Beergola Bros 2025 Fuel Like a Casserole  [Fairlight  2025-01-01  37]
   12. Zone 5  [Fairlight  2025-01-01  37]
   13. D011 Mayhem  [Fairlight  2025-01-01  37]
   14. Just Our Quality Stuff Again  [Fairlight  1990-01-01  37]
   15. The Trip  [Fairlight  2025-01-01  37]
   16. Edison 2025 Invite  [Fairlight  2025-01-01  37]
   17. The Fair Light  [Fairlight  2025-01-01  37]
   18. OTech People III  [Fairlight  2025-01-01  37]

  Showing 1-18 of 50  |  u/^=up  n/->=next
  Number to select,  r=rename  d=delete  q=quit: 1
--------------------------------------------------------------
  Qdor Qdor
--------------------------------------------------------------
  ID:              259366
  Category:        1 (demos)
  Group:           Fairlight
  Handle:          hedning,Pal,redcrab,bepp,SkY,Norrland,Radiant,Pernod,Soya,Pitcher,Pantaloon,Stein Pedersen,Archmage,Frost,papademos,El Jefe,Trap,Trasher,Wix,Danko,Epsilon,tNG,Pastoelio,Bacchus,Trident,Qdor
  Year:            2026
  Released:        2026-02-13
--------------------------------------------------------------

  Files:
      1. qdor-qdor-75db9b39.d64  (174,848 bytes)

  [1] Run on Ultimate (192.168.2.64)
  [2] Download to current directory
  [3] Quit

  Choose action (or Enter to quit): 3  
$

Directly downloading Qdor Qdor, the demo we found in the prevous example

$ ./assembly64.py search "qdor qdor" --download
  1 match(es):

    1. Qdor Qdor

  Showing 1-1 of 1  |  u/^=up
  Number to select,  r=rename  d=delete  q=quit: 1

  1 result(s):

    1. Qdor Qdor  [Fairlight  2026-02-13  1 (demos)]

  Showing 1-1 of 1  |  u/^=up
  Number to select,  r=rename  d=delete  q=quit: 1
--------------------------------------------------------------
  Qdor Qdor
--------------------------------------------------------------
  ID:              259366
  Category:        1 (demos)
  Group:           Fairlight
  Handle:          hedning,Pal,redcrab,bepp,SkY,Norrland,Radiant,Pernod,Soya,Pitcher,Pantaloon,Stein Pedersen,Archmage,Frost,papademos,El Jefe,Trap,Trasher,Wix,Danko,Epsilon,tNG,Pastoelio,Bacchus,Trident,Qdor
  Year:            2026
  Released:        2026-02-13
--------------------------------------------------------------

  Download to:
  [1] Demos dir (/home/idun/demos)
  [2] Browse local filesystem
  [3] Current directory
  [4] Create folder: qdor-qdor/

  Choose (or Enter for current directory): 4
  Created folder: qdor-qdor/
  Downloading qdor-qdor-75db9b39.d64 ... done  (174,848 bytes)
  Saved  ->  qdor-qdor/qdor-qdor-75db9b39.d64
$ 

Searching the demo charts and running a multi-disk demo using automatic disk swap timings

$ ./assembly64.py charts
--------------------------------------------------------------
  CHARTS
--------------------------------------------------------------
    1. demos
    2. onefiledemos
    3. music
    4. graphics
    5. games
    6. tools

  Showing 1-6 of 6  |
  Number to select,  q=quit: 1
--------------------------------------------------------------
  CHART: DEMOS
--------------------------------------------------------------
    1. Aloft  []  *9.75
    2. The Hat  []  *9.75
    3. Next Level  []  *9.73
    4. We Are The Anomaly  []  *9.68
    5. 1337  []  *9.67
    6. Codeboys & Endians  []  *9.67
    7. Mojo  []  *9.65
    8. Coma Light 13  []  *9.64
    9. The Violators  []  *9.64
   10. Edge of Disgrace  []  *9.62
   11. Comaland 100%  []  *9.62
   12. Bromance  []  *9.60
   13. Uncensored  []  *9.60
   14. No Bounds  []  *9.59
   15. Fitty  []  *9.58
   16. The Ghost  []  *9.57
   17. What Is The Matrix 2  []  *9.57
   18. Unboxed  []  *9.56
   19. Lifecycle  []  *9.55
   20. Wonderland XIV  []  *9.55

  Showing 1-20 of 200  |  n/->=next  p/<-=prev
  Number to select,  b=back  q=quit: 5
--------------------------------------------------------------
  1337
--------------------------------------------------------------
  ID:              242855
  Category:        1 (demos)
  Rating:          9.6748466257669
--------------------------------------------------------------

  Flip info available -- 3 disks with auto-flip timings.

  Files:
      1. fairlight-1337-58679b69-a.d64  (196,608 bytes)
      2. fairlight-1337-58679b69-b.d64  (196,608 bytes)
      3. fairlight-1337-58679b69-c.d64  (196,608 bytes)
      4. flip-info.txt  (98 bytes)

  [1] Run on Ultimate (192.168.2.32)
  [2] Run with auto disk flip (192.168.2.32)
  [3] Download to current directory
  [4] Quit

  Choose action (or Enter to quit): 2

  Multi-disk release -- 3 disk image(s):
    1. fairlight-1337-58679b69-a.d64  (196,608 bytes)
    2. fairlight-1337-58679b69-b.d64  (196,608 bytes)
    3. fairlight-1337-58679b69-c.d64  (196,608 bytes)

  Downloading all disks...
  Fetching fairlight-1337-58679b69-a.d64 ... done  (196,608 bytes)
  Fetching fairlight-1337-58679b69-b.d64 ... done  (196,608 bytes)
  Fetching fairlight-1337-58679b69-c.d64 ... done  (196,608 bytes)
  Uploading and mounting fairlight-1337-58679b69-a.d64 ... done  -> /Temp/temp0005
  Resetting machine ... done
  Injecting LOAD"*",8,1 + RUN ...
  Waiting for load to complete ... done  (3713)
  Load detection took 6.2s

  Press Enter to flip immediately, q+Enter to stop.
  Auto-flip: disk 2 (fairlight-1337-58679b69-b.d64) in 0m 01s ...
  Auto-flip to disk 2: fairlight-1337-58679b69-b.d64
  Mounting fairlight-1337-58679b69-b.d64 on drive A: ... done  (200)
  Auto-flip: disk 3 (fairlight-1337-58679b69-c.d64) in 0m 01s ...
  Auto-flip to disk 3: fairlight-1337-58679b69-c.d64
  Mounting fairlight-1337-58679b69-c.d64 on drive A: ... done  (200)

  All disks played.
$ 

Using the Remote File Browser to upload a directory to the Ultimate file system

$ ./assembly64.py remote
--------------------------------------------------------------
  Ultimate-64-II-439E67: /
--------------------------------------------------------------
    1. [DIR]  SD/
    2. [DIR]  Flash/
    3. [DIR]  Temp/
    4. [DIR]  USB0/

  Showing 1-4 of 4  |
  Number to select,  u=upload  q=quit: 1

  Selected: /SD/
  45 dirs, 8 files, ~578 KB shown

  [1] Enter directory
  [2] Download all
  [3] Go back

  Choose: 1
--------------------------------------------------------------
  Ultimate-64-II-439E67: /SD/
--------------------------------------------------------------
    1. [DIR]  #/
    2. [DIR]  _arm2sid/
    3. [DIR]  _BASIC/
    4. [DIR]  _bbs/
    5. [DIR]  _carts/
    6. [DIR]  _D81/
    7. [DIR]  _demos/
    8. [DIR]  _favs/
    9. [DIR]  _G64/
   10. [DIR]  _GEOS/
   11. [DIR]  _Kawari/
   12. [DIR]  _music/
   13. [DIR]  _Pocketwriter64/
   14. [DIR]  _reu_nuvies/
   15. [DIR]  _tape/
   16. [DIR]  _tools/
   17. [DIR]  _Ultimate64/
   18. [DIR]  _updates/
   19. [DIR]  _vic20/

  Showing 1-53 of 53  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  u=upload  q=quit: u

  Upload:
  [1] Enter local path
  [2] Browse local filesystem

  Choose: 2
--------------------------------------------------------------
  Local: /home/idun
--------------------------------------------------------------
    1. [DIR]  code/
    2. [DIR]  demos/
    3. [DIR]  games/
    4. [DIR]  idun-base/
    5. [DIR]  idun-sys/
    6. [DIR]  pics/
    7. [DIR]  sids/

  Showing 1-39 of 39  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  q=quit: 2

  Selected: demos/
  8 dirs, 46 files, ~4.1 MB

  [1] Enter directory
  [2] Upload all to /SD/
  [3] Go back

  Choose: 1
--------------------------------------------------------------
  Local: /home/idun/demos
--------------------------------------------------------------
    1. [DIR]  edge-of-disgrace/
    2. [DIR]  grey/
    3. [DIR]  lifecycle/
    4. [DIR]  next-level/
    5. [DIR]  nine/
    6. [DIR]  signal-carnival/
    7. [DIR]  sonic-the-hedgehog-v12-5/
    8. [DIR]  wonderland-xiii/
    9. amiga-intro.prg  (6,912 bytes)
   10. CopperBooze.prg  (19,593 bytes)
   11. flip-info.txt.bak  (98 bytes)
   12. pac_grey.prg  (38,150 bytes)
   13. rfovdc2.d64  (174,848 bytes)
   14. scanandspin.d64  (174,848 bytes)

  Showing 1-14 of 14  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  q=quit: 2

  Selected: grey/
  3 files, 43 KB

  [1] Enter directory
  [2] Upload all to /SD/
  [3] Go back

  Choose: 2
  Uploading grey/ -> /SD/grey/ ...
    grey/pac_grey.prg ... done (38,150 bytes)
    grey/walking_in_the_sunshine.prg ... done (4,096 bytes)
    grey/walking_in_the_sunshine.sid ... done (1,558 bytes)
  Done.
--------------------------------------------------------------
  Local: /home/idun/demos
--------------------------------------------------------------
    1. [DIR]  edge-of-disgrace/
    2. [DIR]  grey/
    3. [DIR]  lifecycle/
    4. [DIR]  next-level/
    5. [DIR]  nine/
    6. [DIR]  signal-carnival/
    7. [DIR]  sonic-the-hedgehog-v12-5/
    8. [DIR]  wonderland-xiii/
    9. amiga-intro.prg  (6,912 bytes)
   10. CopperBooze.prg  (19,593 bytes)
   11. flip-info.txt.bak  (98 bytes)
   12. pac_grey.prg  (38,150 bytes)
   13. rfovdc2.d64  (174,848 bytes)
   14. scanandspin.d64  (174,848 bytes)

  Showing 1-14 of 14  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  q=quit: q
--------------------------------------------------------------
  Ultimate-64-II-439E67: /SD/
--------------------------------------------------------------
    1. [DIR]  #/
    2. [DIR]  _arm2sid/
    3. [DIR]  _BASIC/
    4. [DIR]  _bbs/
    5. [DIR]  _carts/
    6. [DIR]  _D81/
    7. [DIR]  _demos/
    8. [DIR]  _favs/
    9. [DIR]  _G64/
   10. [DIR]  _GEOS/
   11. [DIR]  _Kawari/
   12. [DIR]  _music/
   13. [DIR]  _Pocketwriter64/
   14. [DIR]  _reu_nuvies/
   15. [DIR]  _tape/
   16. [DIR]  _tools/
   17. [DIR]  _Ultimate64/
   18. [DIR]  _updates/
   19. [DIR]  _vic20/
   20. [DIR]  grey/

  Showing 1-54 of 54  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  u=upload  q=quit: d
  Number to delete: 20
  /SD/grey/ is not empty (3 items).
  Delete recursively? [y/N]: y
  Done.
--------------------------------------------------------------
  Ultimate-64-II-439E67: /SD/
--------------------------------------------------------------
    1. [DIR]  #/
    2. [DIR]  _arm2sid/
    3. [DIR]  _BASIC/
    4. [DIR]  _bbs/
    5. [DIR]  _carts/
    6. [DIR]  _D81/
    7. [DIR]  _demos/
    8. [DIR]  _favs/
    9. [DIR]  _G64/
   10. [DIR]  _GEOS/
   11. [DIR]  _Kawari/
   12. [DIR]  _music/
   13. [DIR]  _Pocketwriter64/
   14. [DIR]  _reu_nuvies/
   15. [DIR]  _tape/
   16. [DIR]  _tools/
   17. [DIR]  _Ultimate64/
   18. [DIR]  _updates/
   19. [DIR]  _vic20/

  Showing 1-53 of 53  |  ^=up
  Number to select,  m=mkdir  r=rename  d=delete  u=upload  q=quit: q
$

Saving a favorite and browsing the favorites list

When viewing any search result, the action prompt includes [v] Add to favorites (or press v). Favorites are stored in ~/.assembly64/config.json.

  [1] Run on Ultimate (192.168.2.64)
  [2] Run with auto disk flip (192.168.2.64)
  [3] Download
  [4] Add to favorites
  v=favorite  q=quit

  Choose action: v
  Added to favorites: Edge of Disgrace

Browse by category:

$ assembly64 favorites
--------------------------------------------------------------
  FAVORITES  (5 saved)
--------------------------------------------------------------
    1. demos          (3)
    2. music          (1)
    3. graphics       (1)

  Number to drill down,  l=list all  q=quit: 1
--------------------------------------------------------------
  FAVORITES › demos  (3)
--------------------------------------------------------------
    1. Edge of Disgrace  [Booze Design  2008]
    2. Comaland 100%  [Censor Design  2015]
    3. Qdor Qdor  [Fairlight  2026]

  Number to select,  b=back  q=quit: 1
  [o]pen  [d]elete  [Enter=cancel]: o

Or use flags to go straight to a category or flat list:

$ assembly64 favorites --demos
$ assembly64 favorites --music
$ assembly64 favorites --list
$ assembly64 favorites --remove 12345

Interactively building a search query in the Category Browser

$ assembly64 cats
--------------------------------------------------------------
  CATEGORIES
--------------------------------------------------------------
    1. c64com  (2 categories)
    2. c64orgintro  (1 categories)
    3. commodore  (5 categories)
    4. csdb  (12 categories)
    5. gamebase  (1 categories)
    6. guybrush  (7 categories)
    7. hvsc  (4 categories)
    8. mayhem  (1 categories)
    9. oneload  (1 categories)
   10. pres  (2 categories)
   11. seuck  (1 categories)
   12. tapes  (1 categories)
   13. utape  (1 categories)
--------------------------------------------------------------

  Enter number to browse category type (or Enter to quit): 4
--------------------------------------------------------------
    csdb
--------------------------------------------------------------
    1. [  0]  CSDB games  (games)
    2. [  1]  CSDB demos  (demos)
    3. [  2]  CSDB 128  (c128stuff)
    4. [  3]  CSDB graphics  (graphics)
    5. [  4]  CSDB music  (music)
    6. [  5]  CSDB discmags  (discmags)
    7. [  6]  CSDB bbs  (bbs)
    8. [  7]  CSDB misc  (c64misc)
    9. [  8]  CSDB tools  (tools)
   10. [  9]  CSDB charts  (charts)
   11. [ 10]  CSDB easyflash  (easyflash)
   12. [ 25]  CSDB reu  (reu)

  Showing 1-12 of 12  |
  Number to select,  q=quit: 4

  CSDB graphics
  Query: category:graphics
  n=name  h=handle  g=group
  a=after  b=before  o=order  c=clear
  Enter=search  q=quit
  Filter: g
  Group: m0nde

  CSDB graphics
  Query: category:graphics group:m0nde
  n=name  h=handle  g=group
  a=after  b=before  o=order  c=clear
  Enter=search  q=quit
  Filter: 
  Searching ...

  Query: category:graphics group:m0nde
  Showing 1-1

  [1] View results
  [4] Refine query
  q=quit

  Choose: 1

  1 result(s):

    1. Me  [m0nde  2024-11-06  3 (graphics)]

  Showing 1-1 of 1  |
  Number to select,  q=quit: 1
--------------------------------------------------------------
  Me
--------------------------------------------------------------
  ID:              247364
  Category:        3 (graphics)
  Group:           m0nde
  Year:            2024
  Released:        2024-11-06
--------------------------------------------------------------

  Files:
      1. me.d64  (174,848 bytes)

  [1] Run on Ultimate (192.168.2.64)
  [2] Download to current directory
  [3] Quit

  Choose action (or Enter to quit): 1
  Downloading me.d64 ... done  (174,848 bytes)
  Uploading and mounting me.d64 ... done  -> /Temp/temp0006
  Resetting machine ... done
  Injecting LOAD"*",8,1 + RUN ...
  Waiting for load to complete ... done  (3110)
  Load detection took 4.2s
  Searching ...

  Query: category:graphics group:m0nde
  Showing 1-1

  [1] View results
  [4] Refine query
  q=quit

  Choose: q 
$ 

About

C64 scene lookup via the Assembly64 API (hackerswithstyle.se)

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages