]> git.sur5r.net Git - cc65/commitdiff
example for creating VLIR binary using ca65
authorizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 10 Jul 2002 19:29:34 +0000 (19:29 +0000)
committerizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 10 Jul 2002 19:29:34 +0000 (19:29 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1341 b7a2c559-68d2-44c3-8de9-860c34a00d81

samples/geos/ca65-vlir/Makefile [new file with mode: 0644]
samples/geos/ca65-vlir/cvthead.grc [new file with mode: 0644]
samples/geos/ca65-vlir/vlir0.s [new file with mode: 0644]
samples/geos/ca65-vlir/vlir1.s [new file with mode: 0644]
samples/geos/ca65-vlir/vlir2.s [new file with mode: 0644]

diff --git a/samples/geos/ca65-vlir/Makefile b/samples/geos/ca65-vlir/Makefile
new file mode 100644 (file)
index 0000000..4814d19
--- /dev/null
@@ -0,0 +1,16 @@
+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?"
diff --git a/samples/geos/ca65-vlir/cvthead.grc b/samples/geos/ca65-vlir/cvthead.grc
new file mode 100644 (file)
index 0000000..a592b3f
--- /dev/null
@@ -0,0 +1,18 @@
+
+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
+}
diff --git a/samples/geos/ca65-vlir/vlir0.s b/samples/geos/ca65-vlir/vlir0.s
new file mode 100644 (file)
index 0000000..90f1b36
--- /dev/null
@@ -0,0 +1,79 @@
+
+; 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
diff --git a/samples/geos/ca65-vlir/vlir1.s b/samples/geos/ca65-vlir/vlir1.s
new file mode 100644 (file)
index 0000000..c346cc9
--- /dev/null
@@ -0,0 +1,46 @@
+
+; 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
diff --git a/samples/geos/ca65-vlir/vlir2.s b/samples/geos/ca65-vlir/vlir2.s
new file mode 100644 (file)
index 0000000..0f63973
--- /dev/null
@@ -0,0 +1,38 @@
+
+; 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
+