--- /dev/null
+all: vlir0.s vlir1.s vlir2.s cvthead.grc
+ grc cvthead.grc
+ ca65 cvthead.s
+ ca65 vlir0.s
+ ca65 vlir1.s
+ ca65 vlir2.s
+ ld65 -C cvthead.cfg cvthead.o vlir0.o vlir1.o vlir2.o
+ vlink out.cvt vlir-head vlir0 vlir1 vlir2
+
+.PHONY: clean
+
+clean:
+ -rm *.o vlir-head vlir0 vlir1 vlir2 cvthead.s cvthead.cfg out.cvt
+
+love:
+ @echo "Not war, eh?"
--- /dev/null
+
+HEADER APPLICATION "test" "TestApp" "V1.0" {
+structure VLIR
+dostype USR
+author "Maciej Witkowiak"
+info "This is just an example."
+}
+
+; output binary file for header will be 'vlir-head'
+; base address for chains >=1 will be $3000
+; output binary file for chain #0 is 'vlir0'
+; output binary file for chain #1 is 'vlir1'
+; output binary file for chain #2 is 'vlir2'
+VLIR vlir-head 0x3000 {
+vlir0
+vlir1
+vlir2
+}
--- /dev/null
+
+; Maciej 'YTM/Elysium' Witkowiak
+; 06.06.2002
+
+; This is source for main VLIR-structured program part
+
+ ; include some GEOS defines
+
+ .include "../../../libsrc/geos/inc/const.inc"
+ .include "../../../libsrc/geos/inc/jumptab.inc"
+ .include "../../../libsrc/geos/inc/geossym.inc"
+ .include "../../../libsrc/geos/inc/geosmac.ca65.inc"
+
+ ; import load addresses for all VLIR chains
+ ; by default they are all the same, but this is not required
+ ; these labels are defined upon linking with ld65 - each segment has it
+ .import __VLIR1_LOAD__
+ .import __VLIR2_LOAD__
+
+ ; import names of functions defined (and exported) in each VLIR part
+ ; of your application
+ ; here I used VLIRx_ prefix to prevent name clash
+
+ .import VLIR1_Function1
+ .import VLIR2_Function2
+
+ ; segments "CODE", "DATA", "RODATA" and "BSS" all go to VLIR0 chain
+
+ .segment "CODE"
+ ; code segment for VLIR 0 chain
+ProgExec:
+ LoadW r0, paramString ; show something
+ jsr DoDlgBox
+
+ MoveW dirEntryBuf+OFF_DE_TR_SC, r1
+ LoadW r4, fileHeader
+ jsr GetBlock ; load back VLIR t&s table
+ bnex error
+
+ lda #1
+ jsr PointRecord ; we want next module (#1)
+ LoadW r2, $ffff ; length - as many bytes as there are
+ LoadW r7, __VLIR1_LOAD__ ; all VLIR segments have the same load address
+ jsr ReadRecord ; load it
+ bnex error
+ jsr VLIR1_Function1 ; execute something
+
+ lda #2
+ jsr PointRecord ; next module
+ LoadW r2, $ffff
+ LoadW r7, __VLIR2_LOAD__
+ jsr ReadRecord ; load it
+ bnex error
+ jsr VLIR2_Function2 ; execute something
+
+error: jmp EnterDeskTop ; end of application
+
+ .segment "RODATA"
+ ; read-only data segment
+paramString:
+ .byte DEF_DB_POS | 1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
+ .word line1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
+ .word line2
+ .byte OK, DBI_X_0, DBI_Y_2
+ .byte NULL
+
+line1: .byte BOLDON, "Hello World!",0
+line2: .byte OUTLINEON,"Hello",PLAINTEXT," world!",0
+
+ .segment "DATA"
+ ; read/write initialized data segment
+counter: .word 0
+
+ .segment "BSS"
+ ; read/write uninitialized data segment
+ ; this space doesn't go into output file, only its size and
+ ; position is remembered
--- /dev/null
+
+; Maciej 'YTM/Elysium' Witkowiak
+; 06.06.2002
+
+; This is source for loadable VLIR-structured program part
+
+ ; include some GEOS defines
+
+ .include "../../../libsrc/geos/inc/const.inc"
+ .include "../../../libsrc/geos/inc/jumptab.inc"
+ .include "../../../libsrc/geos/inc/geossym.inc"
+ .include "../../../libsrc/geos/inc/geosmac.ca65.inc"
+
+ ; export names of functions that will be used in main program
+
+ .export VLIR1_Function1
+ .export VLIR1_Function2
+
+
+ ; go into VLIR1 segment - everything that is here will go into
+ ; VLIR chain #1
+
+ .segment "VLIR1"
+
+VLIR1_Function1: jmp Function1 ; jump table, not really necessary
+VLIR1_Function2: jmp Function2
+ ; etc.
+
+ ; rodata - if this is defined in .segment "RODATA"
+ ; it will end in VLIR0 part, you don't want that
+paramString:
+ .byte DEF_DB_POS | 1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
+ .word line1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
+ .word line2
+ .byte OK, DBI_X_0, DBI_Y_2
+ .byte NULL
+
+line1: .byte "This is in module 1",0
+line2: .byte "This is in module 1",0
+
+ ; code
+Function1: LoadW r0, paramString
+ jsr DoDlgBox
+Function2: rts
--- /dev/null
+
+; Maciej 'YTM/Elysium' Witkowiak
+; 06.06.2002
+
+; This is source for loadable VLIR-structured program part
+
+; similar to vlir1 except the fact that this is chain #2
+
+ .include "../../../libsrc/geos/inc/const.inc"
+ .include "../../../libsrc/geos/inc/jumptab.inc"
+ .include "../../../libsrc/geos/inc/geossym.inc"
+ .include "../../../libsrc/geos/inc/geosmac.ca65.inc"
+
+ .export VLIR2_Function1
+ .export VLIR2_Function2
+
+ .segment "VLIR2"
+
+VLIR2_Function1: jmp Function1
+VLIR2_Function2: jmp Function2
+ ; etc.
+
+paramString:
+ .byte DEF_DB_POS | 1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_2_Y
+ .word line1
+ .byte DBTXTSTR, TXT_LN_X, TXT_LN_3_Y
+ .word line2
+ .byte OK, DBI_X_0, DBI_Y_2
+ .byte NULL
+
+Function2: LoadW r0, paramString
+ jsr DoDlgBox
+Function1: rts
+
+line1: .byte "This is in module 2",0
+line2: .byte "This is in module 2",0
+