mirror of
https://github.com/cc65/cc65.git
synced 2024-10-31 20:06:11 +00:00
example for creating VLIR binary using ca65
git-svn-id: svn://svn.cc65.org/cc65/trunk@1341 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
a152fe71c5
commit
63123a3566
16
samples/geos/ca65-vlir/Makefile
Normal file
16
samples/geos/ca65-vlir/Makefile
Normal file
@ -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?"
|
18
samples/geos/ca65-vlir/cvthead.grc
Normal file
18
samples/geos/ca65-vlir/cvthead.grc
Normal file
@ -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
|
||||
}
|
79
samples/geos/ca65-vlir/vlir0.s
Normal file
79
samples/geos/ca65-vlir/vlir0.s
Normal file
@ -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
|
46
samples/geos/ca65-vlir/vlir1.s
Normal file
46
samples/geos/ca65-vlir/vlir1.s
Normal file
@ -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
|
38
samples/geos/ca65-vlir/vlir2.s
Normal file
38
samples/geos/ca65-vlir/vlir2.s
Normal file
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user