Here's how I do it with spasm (which should automatically sign the app for you if you run
"spasm app.asm app.8xk")
Code: #include "app.inc"
defpage(0,"APP")
start:
bcall _JForceCmdNoChar
validate()
And app.inc:
Code: ; Fatal error macro. Displays message prefixed with "error"
; and returns with error code
#define fatal(str,return) .error str
#macro defpage(page, appname)
#if page = 0
#ifndef gpage
#define free_space 0
#define gpage 0
#ifndef appname
.echo "Warning: No name given, using \"Default\""
#define appname "Default"
#endif
.org $4000
.db $80,$0F,0,0,0,0
.db $80,$12,1,4
.db $80,$21,1
.db $80,$31,1
.db $80,$48
#define gappname eval(appname)
_ .db appname
#define apnamlen eval($ - -_)
echo_fill(apnamlen,"-","------------------------------------------")
.echo "Beginning APP \"",appname,"\", courtesy of SPASM macros"
echo_fill(apnamlen,"-","------------------------------------------")
#if apnamlen <= 8
.fill 8-apnamlen,' '
#else
#define err "App name is ",apnamlen-8," character(s) too long."
fatal(err,1)
#endif
.db $80,$81,0
.db $80,$90
.db $03,$26,$09,$04,$04,$06f,$1b,$80
.db $02,$0d,$40
.db $a1,$6b,$99,$f6,$59,$bc,$67
.db $f5,$85,$9c,$09,$6c,$0f,$b4,$03,$9b,$c9
.db $03,$32,$2c,$e0,$03,$20,$e3,$2c,$f4,$2d
.db $73,$b4,$27,$c4,$a0,$72,$54,$b9,$ea,$7c
.db $3b,$aa,$16,$f6,$77,$83,$7a,$ee,$1a,$d4
.db $42,$4c,$6b,$8b,$13,$1f,$bb,$93,$8b,$fc
.db $19,$1c,$3c,$ec,$4d,$e5,$75
.db $80,$7F,0,0,0,0
.dw 0,0,0,0,0,0,0,0
#else
fatal("There was already a page 0.",1)
#endif
#else
#if ($ & $0000FFFF) > $8000
#define err "Page ",gpage," went over bounds by ",$-$8000," bytes."
fatal(err, 1)
#endif
#if page <= gpage
fatal("Your page numbers must increase.")
#endif
#if page > gpage+1
.echo "Warning: Skipping page ",gpage+1," at user request."
#endif
#define free_space eval(free_space + $8000-($ & $0000FFFF))
.echo "Page ",gpage," free space: ",$8000-($ & $0000FFFF)
.block ($8000-($ & $0000FFFF) + ((page-gpage-1)*$4000))
#define gpage eval(page)
.org $4000+(gpage*$10000)
#endif
#endmacro
#macro validate
#if ($ & $0000FFFF) > $8000
#define err "Page ",gpage," went over bounds by ",$-$8000," bytes."
fatal(err, 1)
#else
.echo "Page ",gpage," free space: ",$8000-($ & $0000FFFF)
#define free_space eval(free_space + $8000 - ($ & $0000FFFF))
.echo "Success: Page sizes validated and \"",gappname,"\" is ready for signing."
.echo " In ",gpage+1," page(s), ",free_space," bytes are available."
#endif
#endmacro
#macro echo_fill(times, char, base)
#if times > 0
#define base base,char
echo_fill(eval(times-1), char, base)
#else
.echo base
#endif
#endmacro
#define .defpage defpage(
#define .validate validate